android学习二十三(解析json格式数据)

前面我们已经掌握了xml格式数据的解析方式,那么接下来我们学习下如何解析json格式的数据。比起xml,json的主要优势在于它体积更小,在网络上传输的时候可以更省流量。但缺点在于,它的语义性差,看起来不如xml直观。

开始之前,先在自己的电脑apache-tomcat-6.0.39\webapps\ROOT路径目录下新建一个get_data.json的文件,然后编辑这个文件,并加入如下json格式的内容:

[{"id":"5","version":"5.5","name":"angelababy"},
{"id":"6","version":"7.0","name":"clash of clans"},
{"id":"7","version":"3.5","name":"hey day"}]

这时候在浏览器访问的结果如下:




这样就把json格式的数据准备好了,下面我们在Android程序中解析这些数据吧。



使用JSONObject解析json格式的数据

解析json格式的数据有很多种方式,可以使用官方提供的JSONObject,也可以用谷歌的开源库GSON。
还有一些第三方的开源库,比如Jackson,FastSON等。目前只讲解JSONObject和GSON。
修改MainActivity中的代码,如下所示:

  1. packagecom.jack.networktest;
  2. importjava.io.BufferedReader;
  3. importjava.io.IOException;
  4. importjava.io.InputStream;
  5. importjava.io.InputStreamReader;
  6. importjava.io.StringReader;
  7. importjava.net.HttpURLConnection;
  8. importjava.net.MalformedURLException;
  9. importjava.net.URL;
  10. importjavax.xml.parsers.SAXParserFactory;
  11. importorg.apache.http.HttpEntity;
  12. importorg.apache.http.HttpHost;
  13. importorg.apache.http.HttpRequest;
  14. importorg.apache.http.HttpResponse;
  15. importorg.apache.http.client.ClientProtocolException;
  16. importorg.apache.http.client.HttpClient;
  17. importorg.apache.http.client.ResponseHandler;
  18. importorg.apache.http.client.methods.HttpGet;
  19. importorg.apache.http.client.methods.HttpUriRequest;
  20. importorg.apache.http.conn.ClientConnectionManager;
  21. importorg.apache.http.impl.client.DefaultHttpClient;
  22. importorg.apache.http.params.HttpParams;
  23. importorg.apache.http.protocol.HttpContext;
  24. importorg.apache.http.util.EntityUtils;
  25. importorg.json.JSONArray;
  26. importorg.json.JSONObject;
  27. importorg.xml.sax.InputSource;
  28. importorg.xml.sax.XMLReader;
  29. importorg.xmlpull.v1.XmlPullParser;
  30. importorg.xmlpull.v1.XmlPullParserFactory;
  31. importandroid.annotation.SuppressLint;
  32. importandroid.app.Activity;
  33. importandroid.os.Bundle;
  34. importandroid.os.Handler;
  35. importandroid.os.Message;
  36. importandroid.util.Log;
  37. importandroid.view.Menu;
  38. importandroid.view.View;
  39. importandroid.view.View.OnClickListener;
  40. importandroid.widget.Button;
  41. importandroid.widget.TextView;
  42. publicclassMainActivityextendsActivityimplementsOnClickListener{
  43. publicstaticfinalintSHOW_RESPONSE=0;
  44. privateButtonsendRequest=null;
  45. privateTextViewresponseText=null;
  46. privateHandlerhandler=newHandler(){
  47. @Override
  48. publicvoidhandleMessage(Messagemsg){
  49. //TODOAuto-generatedmethodstub
  50. super.handleMessage(msg);
  51. switch(msg.what){
  52. caseSHOW_RESPONSE:
  53. Stringresponse=(String)msg.obj;
  54. //在这里进行UI操作,将结果显示到界面上
  55. responseText.setText(response);
  56. break;
  57. default:
  58. break;
  59. }
  60. }
  61. };
  62. @Override
  63. protectedvoidonCreate(BundlesavedInstanceState){
  64. super.onCreate(savedInstanceState);
  65. setContentView(R.layout.activity_main);
  66. sendRequest=(Button)findViewById(R.id.send_request);
  67. responseText=(TextView)findViewById(R.id.response_text);
  68. sendRequest.setOnClickListener(this);
  69. }
  70. @Override
  71. publicbooleanonCreateOptionsMenu(Menumenu){
  72. //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
  73. getMenuInflater().inflate(R.menu.main,menu);
  74. returntrue;
  75. }
  76. @Override
  77. publicvoidonClick(Viewv){
  78. //TODOAuto-generatedmethodstub
  79. if(v.getId()==R.id.send_request){
  80. //sendRequestWithHttpURLConnection();
  81. sendRequestWithHttpClient();
  82. }
  83. }
  84. privatevoidsendRequestWithHttpURLConnection(){
  85. //开启线程来发起网络请求
  86. newThread(newRunnable(){
  87. @Override
  88. publicvoidrun(){
  89. //TODOAuto-generatedmethodstub
  90. HttpURLConnectionconnection=null;
  91. try{
  92. URLurl=newURL("http://www.baidu.com");
  93. connection=(HttpURLConnection)url.openConnection();
  94. connection.setRequestMethod("GET");
  95. connection.setConnectTimeout(8000);
  96. connection.setReadTimeout(8000);
  97. InputStreamin=connection.getInputStream();
  98. //下面对获取到的输入流进行读取
  99. BufferedReaderreader=newBufferedReader(newInputStreamReader(in));
  100. StringBuilderresponse=newStringBuilder();
  101. Stringline;
  102. while((line=reader.readLine())!=null){
  103. response.append(line);
  104. }
  105. Messagemessage=newMessage();
  106. message.what=SHOW_RESPONSE;
  107. //将服务器返回的结果存放到Message中
  108. message.obj=response.toString();
  109. handler.sendMessage(message);
  110. }catch(MalformedURLExceptione){
  111. //TODOAuto-generatedcatchblock
  112. e.printStackTrace();
  113. }catch(Exceptione){
  114. e.printStackTrace();
  115. }finally{
  116. if(connection!=null){
  117. connection.disconnect();
  118. }
  119. }
  120. }
  121. }).start();
  122. }
  123. privatevoidsendRequestWithHttpClient(){
  124. newThread(newRunnable(){
  125. @Override
  126. publicvoidrun(){
  127. //TODOAuto-generatedmethodstub
  128. try{
  129. HttpClienthttpClient=newDefaultHttpClient();
  130. //HttpGethttpGet=newHttpGet("http://www.baidu.com");
  131. //指定访问的服务器地址是电脑本机,10.0.2.2对模拟器来说就是电脑本机的ip地址
  132. //8080为端口号
  133. //HttpGethttpGet=newHttpGet("http://10.0.2.2:8080/get_data.xml");
  134. HttpGethttpGet=newHttpGet("http://10.0.2.2:8080/get_data.json");
  135. HttpResponsehttpResponse=httpClient.execute(httpGet);
  136. if(httpResponse.getStatusLine().getStatusCode()==200){
  137. //请求和响应都成功了
  138. HttpEntityentity=httpResponse.getEntity();
  139. Stringresponse=EntityUtils.toString(entity,"utf-8");
  140. //调用parseXMLWithPull方法解析服务器返回的数据
  141. //parseXMLWithPull(response);
  142. //调用parseXMLWithSAX方法解析服务器返回的数据
  143. parseXMLWithSAX(response);
  144. //调用parseJSONWithJSONObject方法解析服务器返回的数据
  145. parseJSONWithJSONObject(response);
  146. Messagemessage=newMessage();
  147. message.what=SHOW_RESPONSE;
  148. //将服务器返回的结果存放到Message中
  149. message.obj=response.toString();
  150. handler.sendMessage(message);
  151. }
  152. }catch(Exceptione){
  153. e.printStackTrace();
  154. }
  155. }
  156. }).start();
  157. }
  158. //使用Pull解析xml
  159. privatevoidparseXMLWithPull(StringxmlData){
  160. //Log.d("MainActivity","parseXMLWithPull(StringxmlData)");
  161. try{
  162. //获取到XmlPullParserFactory的实例,并借助这个实例得到XmlPullParser对象
  163. XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
  164. XmlPullParserxmlPullParser=factory.newPullParser();
  165. //调用XmlPullParser的setInput方法将服务器返回的xml数据设置进去开始解析
  166. xmlPullParser.setInput(newStringReader(xmlData));
  167. //通过getEventType()方法得到当前解析事件
  168. inteventType=xmlPullParser.getEventType();
  169. Stringid="";
  170. Stringname="";
  171. Stringversion="";
  172. while(eventType!=XmlPullParser.END_DOCUMENT){
  173. //通过getName()方法得到当前节点的名字,如果发现节点名等于id、name、或version
  174. //就调用nextText()方法来获取结点具体的内容,每当解析完一个app结点就将获取到的内容打印出来
  175. StringnodeName=xmlPullParser.getName();
  176. //Log.d("MainActivity",""+eventType+"nodeName="+nodeName);
  177. switch(eventType){
  178. //开始解析某个节点
  179. caseXmlPullParser.START_TAG:{
  180. if("id".equals(nodeName)){
  181. id=xmlPullParser.nextText();
  182. }elseif("name".equals(nodeName)){
  183. name=xmlPullParser.nextText();
  184. }elseif("version".equals(nodeName)){
  185. version=xmlPullParser.nextText();
  186. }
  187. break;
  188. }
  189. caseXmlPullParser.END_TAG:{
  190. if("app".equals(nodeName)){
  191. Log.d("MainActivity","idis"+id);
  192. Log.d("MainActivity","nameis"+name);
  193. Log.d("MainActivity","versionis"+version);
  194. }
  195. break;
  196. }
  197. default:
  198. break;
  199. }
  200. //调用next()方法获取到下一个解析事件
  201. eventType=xmlPullParser.next();
  202. }
  203. }catch(Exceptione){
  204. e.printStackTrace();
  205. }
  206. }
  207. //进行SAX解析的函数
  208. privatevoidparseXMLWithSAX(StringxmlData){
  209. /*
  210. *parseXMLWithSAX方法中先创建一个SAXParserFactory的对象,然后再获取到
  211. *XMLReader对象,接着将我们编写的ContentHandler的实例设置到XMLReader中,
  212. *最后调用parse()方法开始执行解析。
  213. **/
  214. try{
  215. SAXParserFactoryfactory=SAXParserFactory.newInstance();
  216. XMLReaderxmlReader=factory.newSAXParser().getXMLReader();
  217. ContentHandlerhandler=newContentHandler();
  218. //将ContentHandler的实例设置到XMLReader中
  219. xmlReader.setContentHandler(handler);
  220. //开始执行解析
  221. xmlReader.parse(newInputSource(newStringReader(xmlData)));
  222. }catch(Exceptione){
  223. e.printStackTrace();
  224. }
  225. }
  226. //使用JSONObject解析json格式的数据
  227. privatevoidparseJSONWithJSONObject(StringjsonData){
  228. /*
  229. *首先把http请求的地址改成http://localhost:8080/get_data.json,然后在得到服务器返回
  230. *的数据后调用parseJSONWithJSONObject()方法来解析数据。由于我们在服务器中定义的是一个json数组,
  231. *因此解析的时候首先是将服务器返回的数据传入到一个JSONArray对象中。然后循环遍历这个JSONArray,从
  232. *中取出的每一个元素都是一个JSONObject对象,每个JSONObject对象中又包含了id,name和version这些
  233. *数据。接下来只需要调用getString()方法将这些数据取出,并打印出来即可。
  234. **/
  235. try{
  236. JSONArrayjsonArray=newJSONArray(jsonData);
  237. for(inti=0;i<jsonArray.length();i++){
  238. JSONObjectjsonObject=jsonArray.getJSONObject(i);
  239. Stringid=jsonObject.getString("id");
  240. Stringname=jsonObject.getString("name");
  241. Stringversion=jsonObject.getString("version");
  242. Log.d("MainActivity","idis"+id);
  243. Log.d("MainActivity","nameis"+name);
  244. Log.d("MainActivity","versionis"+version);
  245. }
  246. }catch(Exceptione){
  247. e.printStackTrace();
  248. }
  249. }
  250. }


现在重新运行下程序,点击send request按钮,结果如下所示:






使用GSON

谷歌提供的GSON开源库可以让解析JSON数据的工作简单到不敢想象的地步。要使用GSON必须要在项目中添加一个GSON的jar包。首先需要将GSON的资源压缩包下载下来,下载地址是:htt://code.google.com/p/google-gson/downloads/list
然后把下载下来的gson-x.x.x.jar包拷贝到NetworkTest项目的libs目录下,GSON库就自动添加到项目了。
GSON的强大之处,在于可以将一段json格式的字符串自动映射成一个对象,从而不需要我们再动手去编写代码进行解析了。比如说一段json格式的数据如下所示:
{"name":"tom","age":"20"}
那么我们就可以定义一个Person类,并加入name和age这两个字段,然后只需简单地调用如下代码就可以将json数据自动解析成一个Person对象了:
Gson gson=new Gson();
Person person=gson.fromJson(jsonData,Person.class);
如果需要解析的是一段json数组会稍微麻烦点,我们需要借助TypeToken将期望解析的数据类型传入到fromJson()方法,如下所示:
List<Person> people=gson.fromJson(jsonData,new TypeToken<List<Person>>(){}.getType());
好了,基本的用法就是这样了,下面我们来试试,首先新增一个App类,并加入id,name和version这三个字段,如下所示:

  1. packagecom.jack.networktest;
  2. publicclassApp{
  3. privateStringid;
  4. privateStringname;
  5. privateStringversion;
  6. publicStringgetId(){
  7. returnid;
  8. }
  9. publicvoidsetId(Stringid){
  10. this.id=id;
  11. }
  12. publicStringgetName(){
  13. returnname;
  14. }
  15. publicvoidsetName(Stringname){
  16. this.name=name;
  17. }
  18. publicStringgetVersion(){
  19. returnversion;
  20. }
  21. publicvoidsetVersion(Stringversion){
  22. this.version=version;
  23. }
  24. }


然后修改MainActivity中的代码,如下所示:

  1. packagecom.jack.networktest;
  2. importjava.io.BufferedReader;
  3. importjava.io.IOException;
  4. importjava.io.InputStream;
  5. importjava.io.InputStreamReader;
  6. importjava.io.StringReader;
  7. importjava.net.HttpURLConnection;
  8. importjava.net.MalformedURLException;
  9. importjava.net.URL;
  10. importjava.util.List;
  11. importjavax.xml.parsers.SAXParserFactory;
  12. importorg.apache.http.HttpEntity;
  13. importorg.apache.http.HttpHost;
  14. importorg.apache.http.HttpRequest;
  15. importorg.apache.http.HttpResponse;
  16. importorg.apache.http.client.ClientProtocolException;
  17. importorg.apache.http.client.HttpClient;
  18. importorg.apache.http.client.ResponseHandler;
  19. importorg.apache.http.client.methods.HttpGet;
  20. importorg.apache.http.client.methods.HttpUriRequest;
  21. importorg.apache.http.conn.ClientConnectionManager;
  22. importorg.apache.http.impl.client.DefaultHttpClient;
  23. importorg.apache.http.params.HttpParams;
  24. importorg.apache.http.protocol.HttpContext;
  25. importorg.apache.http.util.EntityUtils;
  26. importorg.json.JSONArray;
  27. importorg.json.JSONObject;
  28. importorg.xml.sax.InputSource;
  29. importorg.xml.sax.XMLReader;
  30. importorg.xmlpull.v1.XmlPullParser;
  31. importorg.xmlpull.v1.XmlPullParserFactory;
  32. importcom.google.gson.Gson;
  33. importcom.google.gson.reflect.TypeToken;
  34. importandroid.annotation.SuppressLint;
  35. importandroid.app.Activity;
  36. importandroid.os.Bundle;
  37. importandroid.os.Handler;
  38. importandroid.os.Message;
  39. importandroid.util.Log;
  40. importandroid.view.Menu;
  41. importandroid.view.View;
  42. importandroid.view.View.OnClickListener;
  43. importandroid.widget.Button;
  44. importandroid.widget.TextView;
  45. publicclassMainActivityextendsActivityimplementsOnClickListener{
  46. publicstaticfinalintSHOW_RESPONSE=0;
  47. privateButtonsendRequest=null;
  48. privateTextViewresponseText=null;
  49. privateHandlerhandler=newHandler(){
  50. @Override
  51. publicvoidhandleMessage(Messagemsg){
  52. //TODOAuto-generatedmethodstub
  53. super.handleMessage(msg);
  54. switch(msg.what){
  55. caseSHOW_RESPONSE:
  56. Stringresponse=(String)msg.obj;
  57. //在这里进行UI操作,将结果显示到界面上
  58. responseText.setText(response);
  59. break;
  60. default:
  61. break;
  62. }
  63. }
  64. };
  65. @Override
  66. protectedvoidonCreate(BundlesavedInstanceState){
  67. super.onCreate(savedInstanceState);
  68. setContentView(R.layout.activity_main);
  69. sendRequest=(Button)findViewById(R.id.send_request);
  70. responseText=(TextView)findViewById(R.id.response_text);
  71. sendRequest.setOnClickListener(this);
  72. }
  73. @Override
  74. publicbooleanonCreateOptionsMenu(Menumenu){
  75. //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
  76. getMenuInflater().inflate(R.menu.main,menu);
  77. returntrue;
  78. }
  79. @Override
  80. publicvoidonClick(Viewv){
  81. //TODOAuto-generatedmethodstub
  82. if(v.getId()==R.id.send_request){
  83. //sendRequestWithHttpURLConnection();
  84. sendRequestWithHttpClient();
  85. }
  86. }
  87. privatevoidsendRequestWithHttpURLConnection(){
  88. //开启线程来发起网络请求
  89. newThread(newRunnable(){
  90. @Override
  91. publicvoidrun(){
  92. //TODOAuto-generatedmethodstub
  93. HttpURLConnectionconnection=null;
  94. try{
  95. URLurl=newURL("http://www.baidu.com");
  96. connection=(HttpURLConnection)url.openConnection();
  97. connection.setRequestMethod("GET");
  98. connection.setConnectTimeout(8000);
  99. connection.setReadTimeout(8000);
  100. InputStreamin=connection.getInputStream();
  101. //下面对获取到的输入流进行读取
  102. BufferedReaderreader=newBufferedReader(newInputStreamReader(in));
  103. StringBuilderresponse=newStringBuilder();
  104. Stringline;
  105. while((line=reader.readLine())!=null){
  106. response.append(line);
  107. }
  108. Messagemessage=newMessage();
  109. message.what=SHOW_RESPONSE;
  110. //将服务器返回的结果存放到Message中
  111. message.obj=response.toString();
  112. handler.sendMessage(message);
  113. }catch(MalformedURLExceptione){
  114. //TODOAuto-generatedcatchblock
  115. e.printStackTrace();
  116. }catch(Exceptione){
  117. e.printStackTrace();
  118. }finally{
  119. if(connection!=null){
  120. connection.disconnect();
  121. }
  122. }
  123. }
  124. }).start();
  125. }
  126. privatevoidsendRequestWithHttpClient(){
  127. newThread(newRunnable(){
  128. @Override
  129. publicvoidrun(){
  130. //TODOAuto-generatedmethodstub
  131. try{
  132. HttpClienthttpClient=newDefaultHttpClient();
  133. //HttpGethttpGet=newHttpGet("http://www.baidu.com");
  134. //指定访问的服务器地址是电脑本机,10.0.2.2对模拟器来说就是电脑本机的ip地址
  135. //8080为端口号
  136. //HttpGethttpGet=newHttpGet("http://10.0.2.2:8080/get_data.xml");
  137. HttpGethttpGet=newHttpGet("http://10.0.2.2:8080/get_data.json");
  138. HttpResponsehttpResponse=httpClient.execute(httpGet);
  139. if(httpResponse.getStatusLine().getStatusCode()==200){
  140. //请求和响应都成功了
  141. HttpEntityentity=httpResponse.getEntity();
  142. Stringresponse=EntityUtils.toString(entity,"utf-8");
  143. //调用parseXMLWithPull方法解析服务器返回的数据
  144. //parseXMLWithPull(response);
  145. //调用parseXMLWithSAX方法解析服务器返回的数据
  146. //parseXMLWithSAX(response);
  147. //调用parseJSONWithJSONObject方法解析服务器返回的数据
  148. //parseJSONWithJSONObject(response);
  149. //调用parseJSONWithGSON方法解析服务器返回的数据
  150. parseJSONWithGSON(response);
  151. Messagemessage=newMessage();
  152. message.what=SHOW_RESPONSE;
  153. //将服务器返回的结果存放到Message中
  154. message.obj=response.toString();
  155. handler.sendMessage(message);
  156. }
  157. }catch(Exceptione){
  158. e.printStackTrace();
  159. }
  160. }
  161. }).start();
  162. }
  163. //使用Pull解析xml
  164. privatevoidparseXMLWithPull(StringxmlData){
  165. //Log.d("MainActivity","parseXMLWithPull(StringxmlData)");
  166. try{
  167. //获取到XmlPullParserFactory的实例,并借助这个实例得到XmlPullParser对象
  168. XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
  169. XmlPullParserxmlPullParser=factory.newPullParser();
  170. //调用XmlPullParser的setInput方法将服务器返回的xml数据设置进去开始解析
  171. xmlPullParser.setInput(newStringReader(xmlData));
  172. //通过getEventType()方法得到当前解析事件
  173. inteventType=xmlPullParser.getEventType();
  174. Stringid="";
  175. Stringname="";
  176. Stringversion="";
  177. while(eventType!=XmlPullParser.END_DOCUMENT){
  178. //通过getName()方法得到当前节点的名字,如果发现节点名等于id、name、或version
  179. //就调用nextText()方法来获取结点具体的内容,每当解析完一个app结点就将获取到的内容打印出来
  180. StringnodeName=xmlPullParser.getName();
  181. //Log.d("MainActivity",""+eventType+"nodeName="+nodeName);
  182. switch(eventType){
  183. //开始解析某个节点
  184. caseXmlPullParser.START_TAG:{
  185. if("id".equals(nodeName)){
  186. id=xmlPullParser.nextText();
  187. }elseif("name".equals(nodeName)){
  188. name=xmlPullParser.nextText();
  189. }elseif("version".equals(nodeName)){
  190. version=xmlPullParser.nextText();
  191. }
  192. break;
  193. }
  194. caseXmlPullParser.END_TAG:{
  195. if("app".equals(nodeName)){
  196. Log.d("MainActivity","idis"+id);
  197. Log.d("MainActivity","nameis"+name);
  198. Log.d("MainActivity","versionis"+version);
  199. }
  200. break;
  201. }
  202. default:
  203. break;
  204. }
  205. //调用next()方法获取到下一个解析事件
  206. eventType=xmlPullParser.next();
  207. }
  208. }catch(Exceptione){
  209. e.printStackTrace();
  210. }
  211. }
  212. //进行SAX解析的函数
  213. privatevoidparseXMLWithSAX(StringxmlData){
  214. /*
  215. *parseXMLWithSAX方法中先创建一个SAXParserFactory的对象,然后再获取到
  216. *XMLReader对象,接着将我们编写的ContentHandler的实例设置到XMLReader中,
  217. *最后调用parse()方法开始执行解析。
  218. **/
  219. try{
  220. SAXParserFactoryfactory=SAXParserFactory.newInstance();
  221. XMLReaderxmlReader=factory.newSAXParser().getXMLReader();
  222. ContentHandlerhandler=newContentHandler();
  223. //将ContentHandler的实例设置到XMLReader中
  224. xmlReader.setContentHandler(handler);
  225. //开始执行解析
  226. xmlReader.parse(newInputSource(newStringReader(xmlData)));
  227. }catch(Exceptione){
  228. e.printStackTrace();
  229. }
  230. }
  231. //使用JSONObject解析json格式的数据
  232. privatevoidparseJSONWithJSONObject(StringjsonData){
  233. /*
  234. *首先把http请求的地址改成http://localhost:8080/get_data.json,然后在得到服务器返回
  235. *的数据后调用parseJSONWithJSONObject()方法来解析数据。由于我们在服务器中定义的是一个json数组,
  236. *因此解析的时候首先是将服务器返回的数据传入到一个JSONArray对象中。然后循环遍历这个JSONArray,从
  237. *中取出的每一个元素都是一个JSONObject对象,每个JSONObject对象中又包含了id,name和version这些
  238. *数据。接下来只需要调用getString()方法将这些数据取出,并打印出来即可。
  239. **/
  240. try{
  241. JSONArrayjsonArray=newJSONArray(jsonData);
  242. for(inti=0;i<jsonArray.length();i++){
  243. JSONObjectjsonObject=jsonArray.getJSONObject(i);
  244. Stringid=jsonObject.getString("id");
  245. Stringname=jsonObject.getString("name");
  246. Stringversion=jsonObject.getString("version");
  247. Log.d("MainActivity","idis"+id);
  248. Log.d("MainActivity","nameis"+name);
  249. Log.d("MainActivity","versionis"+version);
  250. }
  251. }catch(Exceptione){
  252. e.printStackTrace();
  253. }
  254. }
  255. //使用JSONWithGSON(StringjsonData)方法解析json格式的数据
  256. privatevoidparseJSONWithGSON(StringjsonData){
  257. Gsongson=newGson();
  258. List<App>appList=gson.fromJson(jsonData,new
  259. TypeToken<List<App>>(){}.getType());
  260. for(Appapp:appList){
  261. Log.d("MainActivity","idis"+app.getId());
  262. Log.d("MainActivity","nameis"+app.getName());
  263. Log.d("MainActivity","versionis"+app.getVersion());
  264. }
  265. }
  266. }


运行程序,结果如下所示:




经过上面两种方法对json格式的数据进行解析,相信对json格式的数据应该不再陌生了。




http://blog.csdn.net/j903829182/article/details/42503583

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值