Android中使用GSON包解析JSON数据(简单JSON)

       之前一直使用Java自带的JSONObject,JSONArray来进行解析,在JSON嵌套不多,数据不大的时候还是不错的。但是对于大量的JSON数据来说,效率就比较低了。Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。使用了面向对象的思想,提高了JSON解析的效率。

       需要解析的JSON数据如下(JSON数据我保存为"languages.json",放在assets目录下。需要去下一个GSON.jar,放到libs文件夹下):

{
  "language": [
    {
      "id": 1,
      "name": "Java",
      "ide": "Eclipse"
    },
    {
      "id": 2,
      "name": "C++",
      "ide": "Visual Studio"
    }
  ]
}

         同时需要新建一个类,一一对应需要解析的属性值,如id/name/ide.(这里就用到了面向对象的思想)。新建Language.java如下:

public class Language {
    private String id;
    private String name;
    private String ide;

    public String getId() {

        return id;
    }

    public String getName() {
        return name;
    }

    public String getIde() {
        return ide;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setIde(String ide) {
        this.ide = ide;
    }
}

       最后主要使用GSON.jar中的GSON类进行解析,把解析结果显示在TextView,直接上代码:

public class MainActivity extends Activity {

    private TextView text;
    private String jsonString;//存放JSON字符串;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (TextView) findViewById(R.id.id_text);

        try {
            InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("languages.json"), "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);//使用BufferReader读取输入流中的数据;
            String line;
            StringBuilder stringBuilder = new StringBuilder();//所有读取的json放到StringBuilder中,这里也可以使用StringBuffer,效果一样;
            while ((line = bufferedReader.readLine()) != null) {
                stringBuilder.append(line);
            }
            jsonString = stringBuilder.toString();
            bufferedReader.close();//按相反的顺序关闭流;
            inputStreamReader.close();

            parseJSON(jsonString);//调用使用GSON解析的方法;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 使用该方法用GSON进行解析;
     *
     * @param json
     */
    private void parseJSON(String json) {

        try {
            Gson gson = new Gson();
            Type type = new TypeToken<ArrayList<Language>>() {
            }.getType();
            JSONObject root = new JSONObject(json);//这个root就是根对象,就是最外面的那个{}花括号;
            ArrayList<Language> language = gson.fromJson(root.getString("language"), type);

            int len = language.size();//获取该数组中有多少个子对象;
            for (int i = 0; i < len; i++) {
                Language lan = language.get(i);//获取数组中的第i个对象;
                text.append(lan.getId() + "  " + lan.getName() + "  " + lan.getIde());
                text.append("\n");
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

        程序运行后的显示效果如下:

Android中使用GSON包解析JSON数据(简单JSON)_第1张图片

         至此,已经成功解析出JSON数据。


附GSON包下载地址:http://pan.baidu.com/s/1mgw1PUC


github主页:https://github.com/chenyufeng1991  。欢迎大家访问!


你可能感兴趣的:(android,json,接口,gson)