java中的json概念及解析

JSON:
概念:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
格式:
无序的名值对组合:{key:value,key:value,key:value。。。}
单个对象:-->{}
java:javabean对象/Map集合
json:JSONObject对象
多个对象:-->[{},{},{}]
java:List<对象/Map>
json:JSONArray数组
解析:
服务端:
提供json数据:url网址


客户端:
A:通过http协议,访问url地址,获取json数据。
String json = "";

B:将String类型的json数据,javabean对象,或者是Map集合,或者List。叫做解析。


解析方式:
1)JSON原生的解析方式。
2)谷歌:Gson
3)阿里巴巴:Fast-json




获取json并解析
step1:http协议,将json数据获取。


step2:格式化:观察数据的格式


step3:构建JavaBean类:
class 类名{
属性名:json中的key一致。
属性类型:和json中的value一致。
}


step4:解析
原理:
根据String json--->JSONObject/JSONArray
JSONObject jsonObject = new JSONObject(json);


创建JavaBean对象,或者是Map集合

操作jsonObject,获取里面每一个key对应的value值。赋值java独享,存入map集合。
jsonObject.getString("name");
jsonObject.getInt("age");
jsonObject.getXXX(key)-->value










如果是json数组
解析原理:
JSONArray-->根据json字符串
JSONArray jsonArray = new JSONArray(json);


一个json数组,对应list集合
List<> list = new ArrayList();


遍历jsonArray,获取每一个jsonObject,对应了一个java对象






网址:
1.一个简单的jsonObject
{"name":"zhangsan","age":30}


baseUrl="http://10.0.166.79:8080/Day22_Server/JsonServlet?action=person";


2.一个简单的jsonArray
[{},{},{}]

baseUrl="http://10.0.166.79:8080/Day22_Server/JsonServlet?action=persons";

3.解析稍微复杂的对象
class Student{
String name;
int age
Book book
}


class Book{
String bookName;
double price;
}




Student stu = new Student("Rose",18,new Book("十万个为啥",34.5));

{name:Rose,age:18,book:{bookName:十万个为啥,price:34.5}}





{key:value,key:value,key:{....}}

baseUrl="http://10.0.166.79:8080/Day22_Server/JsonServlet?action=student";




4.解析稍微复杂的数组:
baseUrl="http://10.0.166.79:8080/Day22_Server/JsonServlet?action=students";


[{},{},{}]








5.一个复杂点的json对象








6.一个复杂的json数组


T t1 = new T();//name,age,list
T t2 = new T();//name,age,list
T t3 = new T();//name,age,list




List list = new ArrayList();
list.add(t1,t2,t3);




[{name:人名,age:年龄,books:[{},{},{}]},{},{}]



Teacher类
{
String name;
int age;
List books;
}




Teacher 卡卡西,28,
List list = new ArrayList();
list.add(new Book());
list.add(new Book());




{name:人名,age:年龄:books:[{},{},{}]}








json.jar
JSONObject,JSONArray


step1:工程上创建一个文件夹folder:lib
step2:json.jar,粘贴到lib目录下
step3:右键:build path-->add to builde path










从JsonObject:获取数据
jsonObject.getXXX(key)-->value
getString(name)-->
getInt(age)-->
getJSONObject("")-->{}
getJSONArray("")-->[]




jsonObject.optXXX(key)-->value












JSONObject--->{}
JSONArray--->[]
解析对象:{}--->JSONObject-->javabean/map
解析数组:[]--->JSONArray-->List<对象/Map>


A:原生
JSONObject
JSONArray


B:谷歌:JavaBean类-->底层是反射
Gson
Gson gson= new Gson();
解析对象:
类 对象 = gson.fromJson(json,类.class);

解析数组:
List<类型> list = gson.fromJson(json,new TypeToken>(){}.getType());


C:阿里巴巴:
fast-json

解析对象:
JSON.parseObject(json,类.class);


解析数组:
JSON.parseArray(json,类.class);//List<类类型>





结合:
原生-,谷歌:Gson
原生-,阿里巴巴:fast-json






class A{
private List info;
}




class B{
String id;
String name;
//....
}

总结和作业:
Json的概念:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。


JSON数据作为目前网络中主流的数据传输格式之一,应用十分广泛。


数据格式:
无序的名值对。


两大类:
单个对象:
{}-->JSONObject-->JavaBean/Map


多个对象:
[]-->JSONArray-->List<对象/Map>




解析:
A:原声的解析方式;
step1:导包:json.jar
step2:通过http协议下载json数据
String json ="";


step3:解析:
1)解析对象
JSONObject jsonObject = new JSONObject(json);


2)解析数组
JSONArray jsonArray = new JSONArray(json);
for(int i=0;i jsonArray.getJSONObject(i)-->JSONObject
}





操作jsonObject.getXXX(key)-->value,或者optXXX(key)-->value
java对象,或者map集合中


B:谷歌:Gson
step1:导包:gson.jar
step2:创建Gson对象
Gson gson = new Gson();


step3:
1)解析对象
gson.fromJson(json,类.class);//对象
2)解析数组
gson.fromJson(json,new TypeToken>(){}.getType());


C:阿里巴巴:Fast-json
step1:导包
step2:
1)解析对象
JSON.parseObject(json,类.class)//对象
2)解析数组
JSON.parseArray(json,类.class);//List<对象>

注意事项:
1.原生:
getXXX()
optXXX()


2.谷歌,阿里巴巴:
Gson,Fast-json
A:javabean类的属性名必须和json的key的名称一致。
B:javabean类,提供get和set方法。用于底层反射。


3.结合:

你可能感兴趣的:(java中的json概念及解析)