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

来源:互联网 发布:苹果8手机怎么打开网络 编辑:程序博客网 时间:2024/05/22 11:55

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

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

[java] view plain copy
 print?
  1. {  
  2.   "language": [  
  3.     {  
  4.       "id"1,  
  5.       "name""Java",  
  6.       "ide""Eclipse"  
  7.     },  
  8.     {  
  9.       "id"2,  
  10.       "name""C++",  
  11.       "ide""Visual Studio"  
  12.     }  
  13.   ]  
  14. }  

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

[java] view plain copy
 print?
  1. public class Language {  
  2.     private String id;  
  3.     private String name;  
  4.     private String ide;  
  5.   
  6.     public String getId() {  
  7.   
  8.         return id;  
  9.     }  
  10.   
  11.     public String getName() {  
  12.         return name;  
  13.     }  
  14.   
  15.     public String getIde() {  
  16.         return ide;  
  17.     }  
  18.   
  19.     public void setId(String id) {  
  20.         this.id = id;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.   
  27.     public void setIde(String ide) {  
  28.         this.ide = ide;  
  29.     }  
  30. }  

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

[java] view plain copy
 print?
  1. public class MainActivity extends Activity {  
  2.   
  3.     private TextView text;  
  4.     private String jsonString;//存放JSON字符串;  
  5.   
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.activity_main);  
  10.         text = (TextView) findViewById(R.id.id_text);  
  11.   
  12.         try {  
  13.             InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("languages.json"), "UTF-8");  
  14.             BufferedReader bufferedReader = new BufferedReader(inputStreamReader);//使用BufferReader读取输入流中的数据;  
  15.             String line;  
  16.             StringBuilder stringBuilder = new StringBuilder();//所有读取的json放到StringBuilder中,这里也可以使用StringBuffer,效果一样;  
  17.             while ((line = bufferedReader.readLine()) != null) {  
  18.                 stringBuilder.append(line);  
  19.             }  
  20.             jsonString = stringBuilder.toString();  
  21.             bufferedReader.close();//按相反的顺序关闭流;  
  22.             inputStreamReader.close();  
  23.   
  24.             parseJSON(jsonString);//调用使用GSON解析的方法;  
  25.         } catch (IOException e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.     }  
  29.   
  30.     /** 
  31.      * 使用该方法用GSON进行解析; 
  32.      * 
  33.      * @param json 
  34.      */  
  35.     private void parseJSON(String json) {  
  36.   
  37.         try {  
  38.             Gson gson = new Gson();  
  39.             Type type = new TypeToken<ArrayList<Language>>() {  
  40.             }.getType();  
  41.             JSONObject root = new JSONObject(json);//这个root就是根对象,就是最外面的那个{}花括号;  
  42.             ArrayList<Language> language = gson.fromJson(root.getString("language"), type);  
  43.   
  44.             int len = language.size();//获取该数组中有多少个子对象;  
  45.             for (int i = 0; i < len; i++) {  
  46.                 Language lan = language.get(i);//获取数组中的第i个对象;  
  47.                 text.append(lan.getId() + "  " + lan.getName() + "  " + lan.getIde());  
  48.                 text.append("\n");  
  49.             }  
  50.         } catch (JSONException e) {  
  51.             e.printStackTrace();  
  52.         }  
  53.     }  
  54. }  

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

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


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


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


0 0
原创粉丝点击