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

来源:互联网 发布:法律科学 知乎 编辑:程序博客网 时间:2024/05/17 08:27

       之前一直使用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();        }    }}

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

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


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


2 0
原创粉丝点击