JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
JSON数据分为数据结构类型和基本类型,具体的表示有多种方式,总结如下:
数据结构:
Object
Array
基本类型:
String、number、true、false、null
常见的封装JSON数据的三种方式:
*调用原生JSONObject类封装JSON数据
*map集合的方式封装JSON数据
*Java Bean的方式封装JSON数据
使用JSONObject类中的put方法封装出符合key-value方式IDEJSON数据,测试的方法如下:
public static void jsonObjectSample(){
//通过JSONObject类构造出对象,该对象去调用JSONObject中的put方法去拼装出JSON格式数据
JSONObject jsonObj = new JSONObject();
Object nullObject = null;
try {
//put方法拼接JSON数据格式(key-value数据)
jsonObj.put("name", "小明");
jsonObj.put("age", 25.2);
jsonObj.put("birthday", "1990-01-01");
jsonObj.put("school", "新东方");
jsonObj.put("major", new String[]{"理发","挖掘机"});
jsonObj.put("has_friend", false);
jsonObj.put("car", nullObject);
jsonObj.put("hourse", nullObject);
jsonObj.put("status", 0);
System.out.println(jsonObj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
测试结果:
{"birthday":"1990-01-01","has_friend":false,"major":["理发","挖掘机"],"school":"新东方","name":"小明","age":25.2,"status":0}
该方式主要是将需要的数据以key-value对的方式封装进map集合中,测试的方法如下:
public static void createJsonByMap(){
//构建一个map集合,该集合用于存放拼装出的key-value键值对数据
Map jsonObj = new HashMap();
jsonObj.put("name", "小明");
jsonObj.put("age", 25.2);
jsonObj.put("birthday", "1990-01-01");
jsonObj.put("school", "新东方");
jsonObj.put("major", new String[]{"理发","挖掘机"});
jsonObj.put("has_friend", false);
jsonObj.put("car", null);
jsonObj.put("hourse", null);
jsonObj.put("status", 0);
System.out.println(new JSONObject(jsonObj).toString());
}
测试结果:
{"birthday":"1990-01-01","has_friend":false,"major":["理发","挖掘机"],"school":"新东方","name":"小明","age":25.2,"status":0}.
对比以上两种方式:
1.原生的JSONObject在封装JSON数据时,put方法不能给value直接赋值为null,需要引用空值对象
2.map集合方式封装JSON数据时,put填入数据可以直接给value赋值为null
对使用JavaBean方式封装JSON数据,实际上就是引用类的构造方法赋值。
首先,我们建一个包含所需字段的普通类,Bean01.class:
/**
*定义一个pojo类,后边将使用javabean方式构造出json数据,
*/
public class Bean01 {
private String name;
private String school;
private boolean has_friend;
private double age;
private Object car;
private Object hourse;
private String[] major;
private String status;
private String birthday;
/*此处省略set和get方法*/
public Bean01() {
}
public Bean01(String name, String school, boolean has_friend, double age, Object car, Object hourse, String[] major,String status, String birthday) {
this.name = name;
this.school = school;
this.has_friend = has_friend;
this.age = age;
this.car = car;
this.hourse = hourse;
this.major = major;
this.status = status;
this.birthday = birthday;
}
@Override
public String toString() {
return "Bean01 [name=" + name + ",
school=" + school + ",
has_friend=" + has_friend + ",
age=" + age + ",
car="+ car + ",
hourse=" + hourse + ",
major=" + Arrays.toString(major) + ",
status=" + status+ ",
birthday=" + birthday + "
]";
}
}
测试方法:
public static void createJsonByBean(){
Bean01 jsonObj = new Bean01();
jsonObj.setName("小明");
jsonObj.setAge(25.2);
jsonObj.setBirthday("1990-01-01");
jsonObj.setSchool("新东方");
jsonObj.setMajor(new String[]{"理发","挖掘机"});
jsonObj.setHas_friend(false);
jsonObj.setCar(null);
jsonObj.setHourse(null);
jsonObj.setStatus("0");
System.out.println(new JSONObject(jsonObj));
}
测试结果:
{"birthday":"1990-01-01","has_friend":false,"major":["理发","挖掘机"],"school":"新东方","name":"小明","age":25.2,"status":"0"}
1.JSONObject在封装JSON数据时,put方法不能给value直接赋值为null,需要引用空值对象
2.Map集合方式封装JSON数据时,put填入数据可以直接给value赋值为null
3.javaBean的方式封装JSON数据较为常用,它实际上是通过目标类的构造方法设值,进而封装出JSON格式数据