一、什么是JSON?
JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。JSON就是一串字符串 只不过元素会使用特定的符号标注。
{} 双括号表示对象
[] 中括号表示数组
“”双引号内是属性或值
:冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
所以 {“name”: “八戒”} 可以理解为是一个包含name为Michael的对象
而[{“name”: “猴哥”},{“name”: “八戒”}]就表示包含两个对象的数组
当然了,你也可以使用{“name”:[“Michael”,”Jerry”]}来简化上面一部,这是一个拥有一个name数组的对象
解析分三个步骤:
1.获取数据或者创建数据
2.解析数据
3.显示到控件上去
第一种手动解析类型:将json格式的字符串{}转换为java对象(如下图)
jsonToJavaObjectByNative.java
private void jsonToJavaObjectByNative() {
//获取或者创建json数据
String json = "{\n" +
" \"id\":2,\n" +
" \"name\":\"猴哥\",\n" +
" \"price\":12.3,\n" +
" \"imgPath\":\"http://img00.hc360.com/cloth/201206/201206191116426249.jpg\"\n" +
"\n" +
"}";
users users = null;
//解析json(getXXX或者optXXX都可以,最好使用optXXX,getXXX容易报空指针)
try {
JSONObject jsonObject = new JSONObject(json);
//String id1 = jsonObject.getString("id");
int id = jsonObject.optInt("id");
String name = jsonObject.getString("name");
double price = jsonObject.optDouble("price");
String imgPath = jsonObject.optString("imgPath");
//封装实体类
users = new users(id, name, price, imgPath);
} catch (JSONException e) {
e.printStackTrace();
}
//显示json
mtest01.setText("原始json数据:"+json);//原始
mtest02.setText("解析后:"+users.toString());//解析后
}
可以使用GsonFormat工具快速生成该类
package com.example.myzg2.json.bean;
/**
* Created by Myzg2 on 2017/7/29.
*/
public class users {
public users(int id, String name, double price, String imgPath) {
this.id = id;
this.name = name;
this.price = price;
this.imgPath = imgPath;
}
public users() {
}
@Override
public String toString() {
return "users{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", imgPath='" + imgPath + '\'' +
'}';
}
/**
* id : 2
* name : 猴哥
* price : 12.3
* imgPath : http://img00.hc360.com/cloth/201206/201206191116426249.jpg
*/
private int id;
private String name;
private double price;
private String imgPath;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getImgPath() {
return imgPath;
}
public void setImgPath(String imgPath) {
this.imgPath = imgPath;
}
}