一、什么是JSON?
JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。
JSON就是一串字符串 只不过元素会使用特定的符号标注。
{} 双括号表示对象
[] 中括号表示数组
"" 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象
而[{"name": "Michael"},{"name": "Jerry"}]就表示包含两个对象的数组
当然了,你也可以使用{"name":["Michael","Jerry"]}来简化上面一部,这是一个拥有一个name数组的对象
json例子:
{
"resultcode":"200",
"reason":"成功的返回",
"result":{
"company":"EMS",
"com":"sf",
"no":"575677355677",
"list":[
{
"datetime":"2018-01-01 10:10:10",
"remark":"已收件",
"zone":"深圳市"
},
{
"datetime":"2018-01-02 01:00:00",
"remark":"快件在 深圳 ,准备送往下一站 武汉集散中心 ",
"zone":"武汉市"
}
],
"status":1
},
"error_code":0
}
解析代码:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class TEST1 {
public static void main(String[] args){
//json数据
String jsonStr = "{\"resultcode\":\"200\",\"reason\":\"成功的返回\",\"result\":{\"company\":\"EMS\",\"com\":\"sf\","
+ "\"no\":\"575677355677\",\"list\":[{\"datetime\":\"2018-01-01 10:10:10\",\"remark\":\"已收件\",\"zone\":\"深圳市\"},"
+ "{\"datetime\":\"2018-01-02 01:00:00\",\"remark\":\"快件在 深圳 ,准备送往下一站 武汉集散中心 \",\"zone\":\"武汉市\"}],\"status\":1},"
+ "\"error_code\":0}";
JSONObject json = JSONObject.fromObject(jsonStr); //得到整个json串
System.out.println("resultcode:"+json.getString("resultcode"));//根据key得到value:200
System.out.println("reason:"+json.getString("reason")); //根据key得到value:成功的返回
//当遇到result时,也是将它当成一个整体串
System.out.println("company:"+JSONObject.fromObject(json.getString("result")).getString("company"));
System.out.println("com:"+JSONObject.fromObject(json.getString("result")).getString("com"));
System.out.println("no:"+JSONObject.fromObject(json.getString("result")).getString("no"));
//当遇到再次嵌套时,此时的list是一个JSONArray,所以需要将其当作数组的形式处理,其实还是一个串
//get(i)以下标为主,里面的东西,其实也是一个json的形式数据,可以不看外面怎么嵌套,按道理只当成单单一个json串处理即可
JSONArray jsonArray=JSONArray.fromObject(JSONObject.fromObject(json.getString("result")).getString("list"));
System.out.println("序循环多少次:"+jsonArray.length());
int num=jsonArray.length();
for(int i=0;i<num;i++){
System.out.println(JSONObject.fromObject(jsonArray.get(i)).getString("datetime"));
System.out.println(JSONObject.fromObject(jsonArray.get(i)).getString("remark"));
System.out.println(JSONObject.fromObject(jsonArray.get(i)).getString("zone"));
}
System.out.println("status:"+JSONObject.fromObject(json.getString("result")).getString("status"));
System.out.println("reason:"+json.getString("error_code"));
}
}
Maven项目引入的坐标:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
alibaba的fastjson和sun里json包区别
1、在使用的时候必然会有区别,相对来说sun包是比较简洁的,而alibaba的包则相对更明了好用。
net包在jsonobject——>string的时候:使用fromObject方法。如下:
User user1 = new User("zhangsan", "beijing", 26);
String arrayStr = JSONObject.fromObject(user1).get("userName").toString();
String arrayStr1 = JSONObject.fromObject(user1).toString();阿里的包在jsonobject——>string的时候:使用parseObject方法。如下:
String arrayStr = JSONObject.parseObject(user1).get("userName").toString();2、在string——>jsonarray候,区别如下:
net包依旧是一个方法行遍天下,使用fromObject方法:
JSONArray arrays = JSONArray.fromObject(arrayStr);阿里包则是使用parseArray方法:
JSONArray arrays = JSONArray.parseArray(arrayStr);
User user = JSON.parseObject(JsonUserStr, User.class);