一、什么是JSON

JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于阅读和编写,同时也易于解析和生成,并有效地提升网络传输效率。

二、JSON 语法

(1)数据在名称/值对中
(2)数据由逗号分隔
(3)大括号保存对象
(4)中括号保存数组

三、Java中JSON的生成与解析的四种方式(简单的Demo):

一个实体类:用于与JSON数据进行相互转换

  1. public class Person {
  2. private String name;
  3. private String sex;
  4. private int age;
  5. public Person(String name, String sex, int age) {
  6. this.name = name;
  7. this.sex = sex;
  8. this.age = age;
  9. }
  10. public String getName() {
  11. return name;
  12. }
  13. public String getSex() {
  14. return sex;
  15. }
  16. public int getAge() {
  17. return age;
  18. }
  19. @Override
  20. public String toString() {
  21. return "Person{name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + '}';
  22. }
  23. }

3.1 利用传统方式:
由实体类生成Json字符串:

  1. public Person getPerson(){
  2. return new Person("张三", "男", 25);
  3. }
  4. @Test
  5. public void EntityToJson(){
  6. JSONObject jsonObject = new JSONObject();
  7. jsonObject.put("name", getPerson().getName());
  8. jsonObject.put("sex", getPerson().getSex());
  9. jsonObject.put("age", getPerson().getAge());
  10. System.out.println(jsonObject.toString());
  11. }

由Json字符串生成实体类:

@Test
public void JsonToEntity(){
    String jsonString = "{\"sex\":\"男\",\"name\":\"张三\",\"age\":25}";
    JSONObject jsonObject = new JSONObject(jsonString);
    Person person = new Person(jsonObject.get("name").toString(), jsonObject.get("sex").toString(), Integer.valueOf(jsonObject.get("age").toString()));
    System.out.println(person.toString());
}

3.2 利用Jackson方式:
由实体类生成Json字符串:

@Test
public void EntityToJson() throws IOException {
    Person person = new Person("张三", "男", 25);
    ObjectMapper objectMapper = new ObjectMapper();
    String jsonString = objectMapper.writeValueAsString(person);
    System.out.println(jsonString);
}

由Json字符串生成实体类:

@Test
public void JsonToEntity() throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    String jsonString = "{\"name\":\"张三\",\"sex\":\"男\",\"age\":25}";
    Person person = objectMapper.readValue(jsonString, Person.class);
    System.out.println(person);
}

3.3 利用GSON方式:
由实体类生成Json字符串:

@Test
public void EntityToJson(){
    Person person = new Person("张三", "男", 25);
    Gson gson = new Gson();
    String jsonString = gson.toJson(person);
    System.out.println(jsonString);
}

由Json字符串生成实体类:

@Test
public void JsonToEntity(){
    String jsonString = "{\"name\":\"张三\",\"sex\":\"男\",\"age\":25}";
    Gson gson = new Gson();
    Person person = gson.fromJson(jsonString, Person.class);
    System.out.println(person.toString());
}

3.4 利用FastJSON方式
由实体类生成Json字符串:

@Test
public void EntityToJson(){
    Person person = new Person("张三", "男", 25);
    Object jsonString = JSON.toJSON(person);
    System.out.println(jsonString.toString());
}

由Json字符串生成实体类:

@Test
public void JsonToEntity(){
    String jsonString = "{\"name\":\"张三\",\"sex\":\"男\",\"age\":25}";
    Person person = JSON.parseObject(jsonString, Person.class);
    System.out.println(person.toString());
}

四、几种方式的比较

类型 简介
传统Json方式: 复杂的Json数据转换成实体类存在缺陷,性能和功能不够完善
Jackson方式: 复杂的Json数据转换成实体类存在缺陷,性能和功能优于传统方式
Gson方式:
功能方面在几种方式中最优,性能方面不如Jackson方式
FastJson方式: 复杂的实体类转换成Json数据存在缺陷,解析json的速度优于其他方式