一起Talk Android吧(第三百四十五回:解析JSON对象)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第三百四十五回:解析JSON对象)相关的知识,希望对你有一定的参考价值。

各位看官们,大家好,上一回中咱们说的是android中JSON的例子,这一回中咱们介绍的例子是解析JSON对象。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,我们在前面章回中介绍了JSON对象的格式,在本章回中我们将介绍如何去解析JSON对象,也就是把JSON对象转换成Java对象,下面是具体的操作步骤:

    1. 使用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数据。
    1. 创建JSONObject对象,把Json字符串传递给类的构造方法就可以创建JSONObject对象;
    1. 通过JSONObject对象的getXXX()或者optXXX()方法获取对象中的数值,这些方法的参数就是key,获取到的数值是value.getXXX方法与optXXX方法的区别在于前者读取不到数据时会抛出异常,后者读取不到数据时 返回null或者默认值;通常使用optXXX方法多一些,这样不会使程序因为异常而崩溃;
    1. 把从JSON字符串获取到的数据转换成Java对象,具体操作如下:
      定义一个Java对象,对象的类型是依据JSON数据的格式定义的,通常我们使用GsonFormat这个插件来辅助我们定义Java对象类型,我们把这种Java对象类型称作Java Bean.通过Java对象的set方法给的成员变量赋值,这样就把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就可以看到以下运行结果 :

JsonBeanTypeid=11, name='jam', price=3.5, path='a/b/c'

看官们,关于Android中解析JSON对象的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第三百四十五回:解析JSON对象)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第三百四十九回:解析JSON数组四)

一起Talk Android吧(第三百四十七回:解析JSON数组二)

一起Talk Android吧(第三百四十六回:解析JSON数组一)

一起Talk Android吧(第三百四十回: Android中的Retrofit)

一起Talk Android吧(第三百四十四回: JSON概述)

一起Talk Android吧(第三百一十五回:Android中的ActionBar)