{ "persons": [ { "person": { "name": "张三", "age": 18, "hobby": [ "游泳", "音乐" ] } }, { "person": { "name": "李四", "age": 20 } } ] }
一个对象,由一个大括号表示
括号中 描述对象的属性与函数,通过键值对来描述对象的属性与函数
格式:
键与值之间使用冒号连接, 多个键值对之间使用逗号分隔
键值对的键应使用引号包围(JS中,不加引号可以解析,但Java会报错)
键值对的值,可以是JS中的任意类型的数据
使用中括号表示数组
在JSON格式中可以与对象互相嵌套
[元素1,元素2…]
常用的解析工具有两个:fastjson、gson
以上两种都需要引入第三方jar包,使用简便
public class Teacher { private String id;// 序号 private String name;// 姓名 private int age;// 年龄 private String[] subjects;// 任课科目 // 为缩减篇幅,构造器、getter/setter、toString等方法不展示 }
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency>
// 新建对象 Teacher t = new Teacher("123", "张三", 48, new String[]{"数学", "地理", "历史"}); // 解析为JSON字符串 String json = JSON.toJSONString(t); // 输出JSON字符串 System.out.println(json);
执行结果:{“age”:48,“id”:“123”,“name”:“张三”,“subjects”:[“数学”,“地理”,“历史”]}
// json字符串 String json = "{\"age\":48,\"id\":\"123\",\"name\":\"张三\",\"subjects\":[\"数学\",\"地理\",\"历史\"]}"; // json字符串转为对象 Teacher teacher = JSON.parseObject(json, Teacher.class); // 输出 System.out.println(teacher);
执行结果:Teacher{id=‘123’, name=‘张三’, age=48, subjects=[数学, 地理, 历史]}
// 将json字符串转为JSONObject // JSONObject的使用近似于Map JSONObject jsonObject = JSON.parseObject(jsonStr); // 将json字符串转为JSONArray // JSONObject的使用近似于List JSONArray jsonArray = JSON.parseArray(jsonStr); // 还有很多相关方法都见名知意,不多赘述
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.7</version> </dependency>
// 新建对象 Teacher t = new Teacher("123", "张三", 48, new String[]{"数学", "地理", "历史"}); // 解析为JSON字符串 String json = new Gson().toJson(t); // 输出JSON字符串 System.out.println(json);
执行结果:{“id”:“123”,“name”:“张三”,“age”:48,“subjects”:[“数学”,“地理”,“历史”]}
// json字符串 String json = "{\"age\":48,\"id\":\"123\",\"name\":\"张三\",\"subjects\":[\"数学\",\"地理\",\"历史\"]}"; // json字符串转为对象 Teacher teacher = new Gson().fromJson(json, Teacher.class); // 输出 System.out.println(teacher);
执行结果:Teacher{id=‘123’, name=‘张三’, age=48, subjects=[数学, 地理, 历史]}