各位看官们,大家好,上一回中咱们说的是Android中JSON的例子,这一回中咱们介绍的例子是解析JSON对象。闲话休提,言归正转。让我们一起Talk Android吧!
看官们,我们在前面章回中介绍了JSON对象的格式,在本章回中我们将介绍如何去解析JSON对象,也就是把JSON对象转换成Java对象,下面是具体的操作步骤:
-
- 使用Json字符串创建JSONObject对象;
这一步看着简单,不过有许多细节需要注意,下面是详细的操作步骤:
首先自已定义一个JSON字符串,然后复制到程序中,AST会自动进行压缩转义(给字符串中的特殊符号添加转义字符,比如给双引号添加转义字符),例如复制{"id":11,"name":"jam","price":3.5,"path":"a/b/c"}
这个字符串,然后在AST中做以下操作: String str = “”,在引号中粘贴上面复制来的字符串,会自动得到以下的转义字符串(一定要在光标中粘贴,否则不会自动添加转义)String jsonString = "{\"id\":11,\"name\":\"jam\",\"id\":33,\"name\":\"Nik\",\"price\":3.5,\"path\":\"a/b/c\"}";
如果在AST中复制转义后的字符串,再粘贴到其它地方时AST会自动去掉字符中添加的转义。
有时候自己创建的JSON字符串数据格式不对,需要修改才可以,我们可以使用SON Parser插件来检验字符串的格式是否正确。在正式的程序中不会自己创建JSON字符串,而是使用网络中web服务器返回的JSON数据。
- 使用Json字符串创建JSONObject对象;
-
- 创建JSONObject对象,把Json字符串传递给类的构造方法就可以创建JSONObject对象;
-
- 通过JSONObject对象的getXXX()或者optXXX()方法获取对象中的数值,这些方法的参数就是key,获取到的数值是value.getXXX方法与optXXX方法的区别在于前者读取不到数据时会抛出异常,后者读取不到数据时 返回null或者默认值;通常使用optXXX方法多一些,这样不会使程序因为异常而崩溃;
-
- 把从JSON字符串获取到的数据转换成Java对象,具体操作如下:
定义一个Java对象,对象的类型是依据JSON数据的格式定义的,通常我们使用GsonFormat这个插件来辅助我们定义Java对象类型,我们把这种Java对象类型称作Java Bean.通过Java对象的set方法给的成员变量赋值,这样就把JSON字符串中存储的数据转换成了Java对象。下面是具体的示例代码,请大家参考:
- 把从JSON字符串获取到的数据转换成Java对象,具体操作如下:
public class JsonBeanType {
/**
* id : 11
* name : jam
* price : 3.5
* path : a/b/c
*/
private int id;
private String name;
private double price;
private String path;
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 getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
@Override
public String toString() {
return "JsonBeanType{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", path='" + path + '\'' +
'}';
}
}
String jsonString = "{\"id\":11,\"name\":\"jam\",\"price\":3.5,\"path\":\"a/b/c\"}";
private void parseJsonObjectByJavaNative() {
try {
JSONObject jsonObject = new JSONObject(jsonString);
JsonBeanType jsonBeanObject = new JsonBeanType();
jsonBeanObject.setId(jsonObject.optInt("id"));
jsonBeanObject.setName(jsonObject.optString("name"));
jsonBeanObject.setPrice(jsonObject.optDouble("price"));
jsonBeanObject.setPath(jsonObject.getString("path"));
Log.d(TAG, "parseJsonDataByJavaNative: "+jsonBeanObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
上面代码中的JSONObject类是Java提供的,我们需要导入包,不过有类似的Json包,不要搞错了具体如下:
import org.json.JSONObject; (这是原生包)
import com.google.gson.JsonObject;(这是google提供的包)
代码中的JsonBeanType类是Java对象的类型,此类型就是我们依据JSON对象的格式定义的。 把上面的程序放到Android的工程中,然后添加到Button的监听器里,编译程序并且点击Button就可以看到以下运行结果 :
JsonBeanType{id=11, name='jam', price=3.5, path='a/b/c'}
看官们,关于Android中解析JSON对象的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!