一、JSONObject的数据是用 { } 来表示的,
例如: { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null }
而JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , ...... , { } ] 来表示
例如: [ { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" } , { "content" : null, "beginTime" : 1398873600000 "endTime" } ] ;
表示了包含2个JSONObject的JSONArray。
可以看到一个很明显的区别,一个最外面用的是 { } ,一个最外面用的是 [ ] ;
JSON数据的书写格式是:名称/值对。 (1)数据在键值对中 (2)数据由逗号分离 (3)花括号保存对象 (4)方括号保存数组
JSON的值: (1)数字(整数或者浮点数) (2)字符串 (3)逻辑值 (true或false) (4) 数组 (5)对象 (6) null
JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
JSONObject:fastJson提供的json对象。
JSONArray:fastJson提供json数组对象。
JSON.parseArray():将json格式的数据转换成数组格式
1、这个方法的作用就是将json格式的数据转换成数组格式。
2、假设有Person这个类,有json类型数据jsonStr = [{"name":"张三","age":"1"},{"name":"李四","age":"4"}],那么
List lists= json.parseArray(jsonStr,Person.class);lists就可以接收jsonStr了
String jsonString = "{name:'Antony',age:'12',sex:'male',telephone:'88888'}";
Staff staff = JSON.parseObject(jsonString, Staff.class);
在JSON.parseObject的时候,会去填充名称相同的属性。对于Json字符串中没有,而model类有的属性,会为null;对于model类没有,而Json字符串有的属性,不做任何处理。
二、在 JSON里[]是 Array(也就是数组),{}是Ojbect(也就是对象)
例如 :var dot1=["a"];就是一个数组
var dot2={"a"};就是一个对象
一个数组是可以包含多个对象的
例如: var dot1=[{a:"a"},{b:"b"}]; dot1就包含了2个对象
同样,dot1={[{a:"a"},{b:"b"}]} 就是一个对象,只是这个对象包含了一个数组。
三、fastjson中常用的方法
1 public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
2 public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
3 public static final T parseObject(String text, Class clazz); // 把JSON文本parse为JavaBean
4 public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
5 public static final List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合
6 public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
7 public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
8 public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。
1.把json字符串转换为实体类
1.1、直接解析为对象(支持深度解析)
T t = JSON.parseObject(jsonstr, T.class); // 解析{...}为对象
List<t> list = JSON.parseArray(jsonstr, T.class); // 解析[{},{}...]为集合
1.2、解析为JSON对象
1.2.1、如果不知道json字符串具体是JSONObject还是JSONArray可以使用
Object obj = JSON.parse(jsonstr); // obj可能为String、JSONArray、JSONObject
1.2.2、如果确定字符串为JSONObject类型
JSONObject parseObject = JSON.parseObject(jsonstr);
1.2.3、如果确定字符串为JSONArray类型
JSONArray jsonarry = JSON.parseArray(jsonstr);
2.获取JSONArray对象中的数据
2.1、获取JSONArray中的单个元素作为JSONObject
JSONObject jsonobject = JSONArray.get(i);
2.2、获取JSONArray中的单个元素作为解析后的实体类(直接封装为实体类)
T t = JSONArray.getObject(i, T.class);
2.3、遍历JSONArray
JSONArray jsonarray = JSON.parseArray(jsonstr);
for(int i=0;i<jsonarray.size();i++){
JSONObject jsonobject = JSONArray.get(i);
T t = JSONArray.getObject(i, T.class);
}
3.String类型获取其中节点
String fileJson = "";
JSONObject jsonObject = JSONObject.parseObject(fileJson);
Object data = jsonObject.get("data");
JSONObject.parseArray(String.valueOf(data), ContentInfo.class);
四、解析
首先要明白一个规律,无论传过来的jsonStr怎么组装,怎么嵌套,都逃不了以下三种,形如[]的JSONArray,形如{}的JSONObject以及“:”连接的键值对,因此解析的第一步要先判断是用parseObject还是parseArray方法(前5种),特别提醒如果直接用方法1,一般要强制转换。前提是你知道传过来的json字符串的格式。第一步解析完之后需要用到下面两类方法来调用:
public JSONObject getJSONObject(int index); //读取对象
public JSONObject getJSONObject(String key); //读取对象
public JSONArray getJSONArray (int index); //读取数组
public JSONArray getJSONArray (String key); //读取数组