注意:
1)json解析是好事操作,最好不要放到主线程里;
2)Json数据到实体模型之间的转化特别容易出错,特别是数据类型,一定要注意;
3)JSONArray JSONObject 这两个对象的使用;
4)如何把字符串转化成json对象? new JSONObject(str);
5)如何获取属性的值? String model = (String) jsonObject.get("model"); 强转类型;
6)定义json数据的时候,最好别使用太多层的嵌套,否则解析可能会出现异常;
把json字符串转化成json对象和json数组
JsonObject jsonObject=new JsonObject(str) { ""="", } 属性都是以兼职对的形式存在的
JsonArray jsonArray=new JsonArray(str) [ ]
在线json解析工具:
http://www.bejson.com/json2javapojo/
使用的json包:
compile 'com.google.code.gson:gson:2.5'
Json语法规则:
1)Json属性数据书写格式 “” : ””, 以键值对的形式存放,键和值都要用双引号括起来。
2)某一个属性值可以是boolean类型:“hasCollect”:true,
3)两个键值对之间,使用逗号分隔。 {"姓名" : "大憨" , "年龄" : 24}
4)一个对象中,可以包含多个属性值。
5){ } [ ] 对象 数组。 { "firstName": "Brett", "lastName":"McLaughlin" }
6){ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } //没有逗号
]} //充分体现了属性值是数组
People表示一个键,它的值是数组,其中有三个对象。
数组里面可以包含三个json对象,每个对象都是通过,分割开的。
在面向对象的语言中,key为对象的属性,value为对应的属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
——————————————————————————————>
"_status":/ˈsteitəs/,统一返回的请求头,里面是服务器端的响应头信息.比如响应码等等
特别要注意中文与英文引号的区别,出错一般都是在这里
——————————————————————————————>
对象在json中表示为“{}”扩起来的内容,数据结构为 {key:value, key:value,...}的键值对的结构。
数组:数组是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...],以逗号分隔。
{ "firstName": "Brett" }---->firstName=Brett,等价于
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }
{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } //没有逗号
]} //充分提醒了属性值是数组
"学生" : {
[
{"姓名" : "小明" , "年龄" : 23},
{"姓名" : "大憨" , "年龄" : 24}
]
}
说明:此Json对象包括了一个学生数组,而学生数组中包含两个学生对象。
值(value)可以是双引号括起来的字符串(string)、数值(int)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
——————————————————————————————>
Json对象:{} 一个json对象可以包含多组属性。
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }
——————————————————————————————>
对json解析异常的处理:后台的数据结构、数据类型一定要确定的、不能经常变更的。
解决方案:后台的数据类型全部都是String类型,到移动端后,自己转换数据类型。
——————————————————————————————>
写代码要严谨:
对空指针异常的处理:对控件赋值前,先判断从服务器端获取的数据是否为空。
——————————————————————————————>
——————————————————————————————>
1) 只需要复制键名就好了,值是从服务器端读取的。
2) 解析json的时候,每个对象中的属性不完全一样,一定要注意。
3) 解析json的时候,数据类型千万别写错了,要不然很难查找的。
5) 集合里面的对象所具有的字段(点开集合,点开其中的某一个对象)
6) 类与类之间是并列关系
7) public List<Integer> extend;里面全是数字 使用Integer类型,集合里面的数据类型
8) 别忘了添加toString方法比较方便
接收到服务器端的json字符串,按照json字符串的格式,编写一个模型。
使用断点调试,查看json对象里面的信息 fromJson()方法的返回值
把那这种形式看做是对象就好了
public class Object {
//这是两种数据类型 类
public _status st;
public User u;
public class _status{
public int _code;
public String _message;
}
public class User{
public String uid;
}
}
public class NewCenterInfo {
/** 第一个是集合,第二个是集合,第三个是个普通的值 **/
public List<NewCenterData> data;
public List<Integer> extend;
public int retcode;
public class NewCenterData {
public List<ChildrenInfo> children;
public int id;
public String title;
public String type;
}
public class ChildrenInfo {
public String id;
public String title;
public String type;
public String url;
}
}