简介: JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式。
1.对象格式 一个对象, 由一个大括号表示. 括号中 描述对象的属性 . 通过键值对来描述对象的属性(可以理解为, 大括号中, 包含的是一个个的键值对.) 格式: 键与值之间使用冒号连接, 多个键值对之间使用逗号分隔. 键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解 析.) 键值对的值, 可以是JS中的任意类型的数据 2.数组格式 在JSON格式中可以与对象互相嵌套 [元素1,元素2…] 例如:
{ "name":"金苹果", "info":"种苹果" } { "name":"伟杰老师", "age":18, "pengyou":["张三","李四","王二","麻子", { "name":"野马老师", "info":"像匹野马一样狂奔在技术钻研的道路上" }], "heihei":{ "name":"大长刀", "length":"40m" } }实体类:
public class Person { private String name; private String sex; private int age; public Person(String name, String sex, int age) { this.name = name; t his.sex = sex; this.age = age; } public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } @Override public String toString() { return "Person{name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + '}'; } }1.由实体类生成Json字符串:
public Person getPerson(){ return new Person("张三", "男", 25); } @Test public void EntityToJson(){ JSONObject jsonObject = new JSONObject(); jsonObject.put("name", getPerson().getName()); jsonObject.put("sex", getPerson().getSex()); jsonObject.put("age", getPerson().getAge()); System.out.println(jsonObject.toString()); }由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()); }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)利用GSON方式: 由实体类生成Json字符串: 转换JSON字符串的步骤: 1. 引入JAR包 2.在需要转换JSON字符串的位置编写如下代码即可: String json = new Gson().toJson(要转换的对象);
@Test public void EntityToJson(){ Person person = new Person("张三", "男", 25); Gson gson = new Gson(); String jsonString = gson.toJson(person); System.out.println(jsonString); }由Json字符串生成实体类:
引入JAR包在需要转换Java对象的位置, 编写如下代码: 对象 = new Gson().fromJson(JSON字符串,对象类型.class); @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()); }(4)利用FastJSON方式 由实体类生成Json字符串: 转换JSON字符串的步骤:
引入JAR包在需要转换JSON字符串的位置编写如下代码即可: String json=JSON.toJSONString(要转换的对象); @Test public void EntityToJson(){ Person person = new Person("张三", "男", 25); Object jsonString = JSON.toJSON(person); System.out.println(jsonString.toString()); }由Json字符串生成实体类:
引入JAR包在需要转换Java对象的位置, 编写如下代码: 类型 对象名=JSON.parseObject(JSON字符串, 类型.class); 或 List<类型> list=JSON.parseArray(JSON字符串,类型.class); @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的速度优于其他方式