给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是XML格式或者JSON格式。然后JSON相对XML来说解析相对方便一些,所以先说说JSON的解析。

JSON的基本数据格式有这几种:

1.一个JSON对象——JSONObject

{"name":"胡小威" , "age":20 , "male":true}

2.一个JSON数组——JSONArray

[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]

3.复杂一点的JSONObject

{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}}

4.复杂一点的JSONArray

[

{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}},

{"name":"赵小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中国"}}

]

5.来个更复杂的,这是我从爱帮公交上扒取的数据

{"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}

接下来是解析部分

一、直接解析

1.{"name":"胡小威" , "age":20 , "male":true}

Java代码  
  1. public void parseJsonObject(String json) {
  2. try {
  3. JSONObject jsonObject = new JSONObject(json);
  4. String name = jsonObject.getString("name");
  5. int age = jsonObject.getInt("age");
  6. boolean male = jsonObject.getBoolean("male");
  7. //接下来该干嘛干嘛
  8. } catch (JSONException e) {
  9. // TODO Auto-generated catch block
  10. e.printStackTrace();
  11. }
  12. }

2.[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]

Java代码  
  1. public void parseJSONArray(String json) {
  2. try {
  3. JSONArray jsonArray = new JSONArray(json);
  4. for (int i = 0; i < jsonArray.length(); i++) {
  5. jsonObject = jsonArray.getJSONObject(i);
  6. String name = jsonObject.getString("name");
  7. int age = jsonObject.getInt("age");
  8. boolean male = jsonObject.getBoolean("male");
  9. //接下来该干嘛干嘛
  10. }
  11. } catch (JSONException e) {
  12. // TODO Auto-generated catch block
  13. e.printStackTrace();
  14. }
  15. }

3.{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}}

Java代码  
  1. public void parseJsonPerson(String json) {
  2. try {
  3. JSONObject jsonObject = new JSONObject(json);
  4. String name = jsonObject.getString("name");
  5. int age = jsonObject.getInt("age");
  6. boolean male = jsonObject.getBoolean("male");
  7. JSONObject addressJSON = jsonObject.getJSONObject("address");
  8. String street = addressJSON.getString("street");
  9. String city = addressJSON.getString("city");
  10. String country = addressJSON.getString("country");
  11. Address address = new Address(street, city, country);
  12. Person person = new Person(name, age, male, address);
  13. } catch (JSONException e) {
  14. // TODO Auto-generated catch block
  15. e.printStackTrace();
  16. }
  17. }

4.

[

{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}},

{"name":"赵小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中国"}}

]

Java代码  
  1. public void parseJsonArrayPerson(String json) {
  2. List<Person> persons = new ArrayList<Person>();
  3. try {
  4. jsonArray = new JSONArray(json);
  5. for (int i = 0; i < jsonArray.length(); i++) {
  6. jsonObject = jsonArray.getJSONObject(i);
  7. String name = jsonObject.getString("name");
  8. int age = jsonObject.getInt("age");
  9. boolean male = jsonObject.getBoolean("male");
  10. JSONObject addressJSON = jsonObject.getJSONObject("address");
  11. String street = addressJSON.getString("street");
  12. String city = addressJSON.getString("city");
  13. String country = addressJSON.getString("country");
  14. Address address = new Address(street, city, country);
  15. Person person = new Person(name, age, male, address);
  16. persons.add(person);
  17. Log.v("juno", person.toString());
  18. }
  19. } catch (JSONException e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. }
  23. Log.v("juno", persons.toString());
  24. }

5. {"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}

Java代码  
  1. public List<Salution> parseJSON(String str){
  2. Log.d("返回的JSON数据:", str);
  3. List<Salution> busList = new ArrayList<Salution>();
  4. try {
  5. JSONObject jsonObject = new JSONObject(str);
  6. JSONObject busesJSON = jsonObject.getJSONObject("buses");
  7. JSONArray busJSArray=busesJSON.getJSONArray("bus");
  8. for(int i=0;i<busJSArray.length();i++){
  9. JSONObject busJSObject = busJSArray.getJSONObject(i);
  10. JSONObject segsJSObject=busJSObject.getJSONObject("segments");
  11. JSONArray segJSArray=segsJSObject.getJSONArray("segment");
  12. Salution st=new Salution();
  13. for(int j=0;j<segJSArray.length();j++){
  14. if(j==0){
  15. JSONObject segJSObject = segJSArray.getJSONObject(j);
  16. st.setLine_name1(segJSObject.getString("line_name"));
  17. Log.d("line_name", segJSObject.getString("line_name"));
  18. st.setStats1(segJSObject.getString("stats"));
  19. st.setEnd_stat1(segJSObject.getString("end_stat"));
  20. st.setStart_stat1(segJSObject.getString("start_stat"));
  21. }
  22. if(j==1){
  23. JSONObject segJSObject = segJSArray.getJSONObject(j);
  24. st.setLine_name2(segJSObject.getString("line_name"));
  25. Log.d("line_name", segJSObject.getString("line_name"));
  26. st.setStats2(segJSObject.getString("stats"));
  27. st.setEnd_stat2(segJSObject.getString("end_stat"));
  28. st.setStart_stat2(segJSObject.getString("start_stat"));
  29. }
  30. }
  31. busList.add(st);
  32. }
  33. return busList;
  34. } catch (JSONException e) {
  35. // TODO Auto-generated catch block
  36. e.printStackTrace();
  37. }
  38. return null;
  39. }

这里我只是简单获取了几个我想要的数据。

二、使用JSON类库Gson 来解析JSON

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

首先,从 code.google.com/p/google-gson/downloads/list下载GsonAPI

Java代码  
  1. google-gson-1.7.1-release.zip

再把gson-1.7.jar copy到libs

可以使用两种方法解析

①、通过获取JsonReader对象解析JSON数据:

Java代码  
  1. String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
  2. try{
  3. JsonReader reader = new JsonReader(new StringReader(jsonData));
  4. reader.beginArray();
  5. while(reader.hasNext()){
  6. reader.beginObject();
  7. while(reader.hasNext()){
  8. String tagName = reader.nextName();
  9. if(tagName.equals("username")){
  10. System.out.println(reader.nextString());
  11. }
  12. else if(tagName.equals("userId")){
  13. System.out.println(reader.nextString());
  14. }
  15. }
  16. reader.endObject();
  17. }
  18. reader.endArray();
  19. }
  20. catch(Exception e){
  21. e.printStackTrace();
  22. }

②、通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作

Java代码  
  1. Type listType = new TypeToken<LinkedList<User>>(){}.getType();
  2. Gson gson = new Gson();
  3. LinkedList<User> users = gson.fromJson(jsonData, listType);
  4. for (Iterator iterator = users.iterator(); iterator.hasNext();) {
  5. User user = (User) iterator.next();
  6. System.out.println(user.getUsername());
  7. System.out.println(user.getUserId());
  8. }

【转】几种不同格式的json解析相关推荐

  1. 不同格式的json解析

    文章目录 一.基本数据格式 1. 一个JSON对象 2.一个JSON数组 3.复杂JSONObject 4. 复杂JSONArray 5.更复杂的json 二.解析 2.1. JSONObject解析 ...

  2. 小程序读取几种不同格式json数据(小程序json解析)

    小程序json解析第一种格式 that.setData({goldData: res.data.result[0], //result里多了个{}所以要标个[0]}) wxml <text cl ...

  3. oracle中多层嵌套命名,一种多层嵌套的json格式数据的命名解析方法

    一种多层嵌套的json格式数据的命名解析方法 [专利摘要]一种n层嵌套的json格式数据的命名解析方法,包括以下步骤:首先,以n层嵌套的json格式数据为基础建立数据源:然后,以键值对为最小单元由外而 ...

  4. 安卓取map集合转换为json_android json解析成map格式

    "discount": { "3": "34", "4": "33", "5": ...

  5. IOS中Json解析的四种方法

    2019独角兽企业重金招聘Python工程师标准>>> 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此& ...

  6. 【转】IOS中Json解析的四种方法

    原文网址:http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有 ...

  7. gson解析天气json_几种常用JSON解析库性能比较

    PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...

  8. IOS中四种json解析效率比较

    作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此"http://www.bejson.com/"网站来进 ...

  9. json string 格式_自己动手实现一个简单的JSON解析器

    作者:田小波 原文:http://cnblogs.com/nullllun/p/8358146.html 1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数 ...

  10. JSON解析的几种方式

    JSON是首先一种数据结构,说白了就是对数据的描述,刚刚出现是为了取代XML,可惜并没有,但是在作为配置文件上,却是很好,由于它小巧灵活,描述数据很好,所以在网络上进行数据传输更加方便. 请记住JSO ...

最新文章

  1. ACM-最短路之中的一个个人的旅行——hdu2066
  2. TCP三次握手的原理及***手段
  3. linux 安装x环境,linux下安装xdebug
  4. .NET Core + Kubernetes:Service
  5. C++工作笔记-C++代码实现接口的概念
  6. 实战:基于Node的控制台记事本开发
  7. UITableView 删除cell
  8. steam常用计算机,絮絮叨叨的繁星 篇二:新电脑必备——常用验机和跑分软件汇总...
  9. 2018 大数据学习入门必备规划
  10. JavaScript红宝书、犀牛书(2本)简介
  11. 创建SSM项目框架搭建流程--史上最详细教程
  12. 1.2 win10下Docker 和 Docker Compose的安装
  13. SCSI子系统基础学习笔记 (之UFS子系统) - 3. UFS命令处理
  14. Hybrid App开发模式
  15. 损失函数,mse,cee
  16. 百度AI图像处理—人体分析(人像切割—AI抠图)调用教程(基于Python3-附Demo)
  17. 【云计算】2_云服务器产品介绍
  18. 解密“CDO-首席数据官”的价值、挑战及发展
  19. Android Base64的加密与解密
  20. r语言知识点(课件)

热门文章

  1. 基于TCP协议的游戏代理接口测试工具<二>:工具架构与代理主体实现
  2. 让IPFS星际文件系统永久保存你的数据
  3. Leetcode之Teemo Attacking 问题
  4. 海思(六)如何在ubuntu20.04上搭建caffe环境
  5. 计算机闹铃音乐是什么歌,适合当闹铃的歌曲
  6. 这次的深夜食堂来到了甲米,只为寻找那些…
  7. (一)RFB协议概述
  8. 矩阵快速幂求斐波那契数列 poj3070
  9. 广谱感应水处理器与缠绕式电子水处理器的区别
  10. 2022妈妈杯移动通信网络站址规划和区域聚类问题D题思路导读,你还在用kmeans?