一、 Json两种结构:
1.名称/值的集合 被理解为对象(object)
数据格式:
- 每一个对象以“{”(左括号)开始,“}”(右括号)结束
- 每个名称后跟一个“:”名称/值 对之间使用“,” 隔开 如:
{
"name":"domain",
"age":19
}
2.值的有序列表 被理解为数组(array)
数据格式
- 以 “[” 开始 ,“]” 结束 值之间用“,” 隔开 如:
{
"students":
[
{"name":"domain","age":15},
{"name":"jack","age":16}
]
}
二、android解析json 数据
1.使用JsonObject 解析
首先写一个json数据,这边直接用字符串的形式写好,写了一个头 person 。正常来说数据是从服务器读取过来的json数据,关于android的网络通信 以后会在写,这边主要写json数据的解析
String jsoncontent ="{\"person\":{\"address\":\"ganzhou\",\"id\":101,\"name\":\"domain\"}}";
写了一个方法传入 json数据的 头 和json数据 然后用JsonObject 进行解析
public void getjson(String key,String jsoncont){
try {
//新建jsonobject 对象 把json格式的字符串 传进来
JSONObject jsonObject =new JSONObject(jsoncont);
//把除了头之外的内容读取出来 存为新的jsonobject 对象
JSONObject personjsonObject=jsonObject.getJSONObject(key);
//把数据中的id读取出来 赋值 给id
id=personjsonObject.getInt("id");
//把数据中的name读取出来 赋值 给name
name=personjsonObject.getString("name");
//把数据中的address读取出来 赋值 给address
address=personjsonObject.getString("address");
//打印输出 。(没有问题)
System.out.println(id+name+address);
} catch (JSONException e) {
e.printStackTrace();
}
}
2.使用Gson 进行解析
-
介绍
1.可以把java对象转化成json,也可以把json字符串转化成一个相等的java对象
2.支持任意复杂包括没有源代码的对象
-
创建一个json格式的字符串数据
转义之后
String jsoncontent1="{\n" +
"\t\"animals\":{\n" +
"\t\"dog\":[\n" +
"\t\t{\"name\":\"Rufus\",\"breed\":\"labrador\",\"count\":1,\"twoFeet\":false},\n" +
"\t\t{\"name\":\"Marty\",\"breed\":\"whippet\",\"count\":1,\"twoFeet\":false}\n" +
"\t],\n" +
"\t\"cat\":{\"name\":\"Matilda\"}\n" +
"}\n" +
"}";
转义之前
{
"animals":{
"dog":[
{"name":"Rufus","breed":"labrador","count":1,"twoFeet":false},
{"name":"Marty","breed":"whippet","count":1,"twoFeet":false}
],
"cat":{"name":"Matilda"}
}
}
-
完成gson库的依赖在app中的build.gradle 的dependencies 加入
compile 'com.google.code.gson:gson:2.6.2'
-
创建javaBean 类,在之后gson的解析方法中要用到。可以通过在线json生成javaBean类工具
-
接下来就可以用Gson进行json数据的解析了
//实例化root类,root类中实例化了其他三个类,所以这边只需要实例化root类
Root root=new Root();
//实例化Gson
Gson gson=new Gson();
//调用gson的form.Json 进行解析,只需要传入json格式的数据和你所生成的javaBean类的定义
root=gson.fromJson(jsonstr,Root.class);
-
测试是否解析成功
System.out.println("----解析后的数据--->");
System.out.println("取出dom name");
for (int i = 0;i<animals.dog.size();i++){
// for(int j = 0; j<animals.dog.get(i).value.length;j++)
// {
// System.out.println(web.get(i).value[j]);
// }
System.out.println(animals.dog.get(i).name);
}
System.out.println("取出dog 的breed");
for (int i = 0; i <animals.dog.size() ; i++) {
System.out.println(animals.dog.get(i).breed);
}
System.out.println("取出猫名:");
System.out.println(animals.cat.getName());
运行结果