{
"name": "张三",
"age": 20,
"skills": [
"java",
"python",
"javascript"
],
"friends": [
{
"name": "小红",
"age": 20
},
{
"name": "小绿",
"age": 21
}
],
"has_girlfriend": false,
"job": null
}
JSON 语法是 JavaScript 对象表示法语法的子集。
JSON 值可以是:
- 数字(整数或浮点数),统一为数据类型number
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在中括号中)
- 对象(在大括号中)
- null
1)首先,在maven的pom.xml中添加org.json包的依赖:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
2)构建json数据
public static void JSONObjectDemo() throws JSONException {
Object mynull = null;
JSONObject zhangsan = new JSONObject();
zhangsan.put("name", "张三");
zhangsan.put("age",20);
zhangsan.put("skills",new String[]{"java","python","javascript"});
JSONObject xiaohong = new JSONObject();
xiaohong.put("name", "小红");
xiaohong.put("age", 20);
JSONObject xiaolv = new JSONObject();
xiaolv.put("name", "小绿");
xiaolv.put("age", 21);
zhangsan.put("friends", new Object[]{xiaohong,xiaolv});
zhangsan.put("has_girlfriend",false);
zhangsan.put("job",mynull);
System.out.println(zhangsan.toString());
}
方法类似上面:
public static void CreateJsonByMap() {
Map<String,Object> zhangsan = new HashMap<String,Object>();
Object mynull = null;
zhangsan.put("name", "张三");
....
System.out.println(new JSONObject(zhangsan).toString());
}
首先要有一个javabean的类,比如已经创建好了Person类
public static void CreateJsonByBean() {
Person zhangsan = new Person();
zhangsan.setName("张三");
....
System.out.println(new JSONObject(zhangsan).toString());
}
public static void ParserFromFile() throws IOException, JSONException {
BufferedReader br = new BufferedReader(new FileReader("F://zhangsan.json"));
StringBuffer sb = new StringBuffer();
String temp = null;
while((temp = br.readLine())!=null){
sb.append(temp);
}
JSONObject jo = new JSONObject(sb.toString());
if(!jo.isNull("name")){ //增强健壮性
System.out.println("姓名:"+jo.getString("name"));
}
//获取数组
JSONArray major = jo.getJSONArray("skills");
for (int i = 0;i<major.length();i++) {
System.out.println("major"+(i+1)+"-"+major.get(i));
}
}
1)将Javabean的对象转为json字符串:
public static void BeanToJSON(){
User lisi = new User();
lisi.setName("李四");
lisi.setAge(20);
lisi.setSkills(new String[]{"唱歌","跳舞"});
lisi.setHas_girlfriend(true);
Gson gs = new Gson();
System.out.println(gs.toJson(lisi));
}
2)将json字符串转为Javabean的对象:
public static void JSONToBean() throws IOException{
BufferedReader br = new BufferedReader(new FileReader("F://zhangsan.json"));
StringBuffer sb = new StringBuffer();
String temp = null;
while((temp = br.readLine())!=null){
sb.append(temp);
}
Gson gs = new Gson();
User zhangsan = gs.fromJson(sb.toString(), User.class);
}
1)格式化显示:
GsonBuilder gb = new GsonBuilder();
gb.setPrettyPrinting();
Gson gs = gb.create();
System.out.println(gs.toJson(lisi));
2)利用Gson生成新的策略,通过代入回调函数添加额外功能,生成个性化的json
GsonBuilder gb = new GsonBuilder();
gb.setFieldNamingStrategy(new FieldNamingStrategy() {
public String translateName(Field f) {
if(f.getName().equals("name"))
return "NAME";
else
return f.getName();
}
});
Gson gs = gb.create();
System.out.println(gs.toJson(lisi));
3)字符串转日期类型
json中没有Date类型,所以一般用String类型表示日期,GSON提供了转换功能
GsonBuilder gb = new GsonBuilder();
gb.setDateFormat("yyyy-MM-dd"); //设置日期模板,json中的此格式内容会自动转为Date类型
Gson gs = gb.create();
User zhangsan = gs.fromJson(sb.toString(), User.class);
System.out.println(zhangsan.getBirthday().toLocaleString());