一直以来,经常会遇到json数据从前端或者我经常从网站上爬取的数据中会有json数据的存在,这样如果想要获取json数据就需要对json数据进行解析

在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML、JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式,

JSON可以有两种格式,一种是对象格式的,另一种是数组对象,

{"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串

[{"name":"JSON","address":"北京市西城区","age":25}]//数据对象格式

从上面的两种格式可以看出对象格式和数组对象格式唯一的不同则是在对象格式的基础上加上了[],再来看具体的结构,可以看出都是以键值对的形式出现的,中间以英文状态下的逗号(,)分隔。

在前端和后端进行数据传输的时候这种格式也是很受欢迎的,后端返回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串解析为json对象,然后进行遍历,供前端使用。

下面我用的是java语言解析json数据的

解析数据前需要引入一个包

可以到http://mvnrepository.com/artifact/edu.uci.ics这里下载相应的jar包

public class JsonToObject {
/**解析json字符串最外面是[]的情况
* [{"rating":["9.6","50"],"rank":1},{"rating":["9.6","50"],"rank":2}]
* @throws Exception
*/
public List<Map<String, String>> toMapOne(String jsonString)throws Exception{
//第一步是将最外面一层的数组解析去掉,得到所有的json串
JSONArray jsons = JSONArray.fromObject(jsonString); List<Map<String, String>> nodes = new ArrayList<Map<String, String>>();
//循环遍历所有的json子串
for (Object o : jsons)
{
JSONObject jsonNode = JSONObject.fromObject(o);
Map<String, String> treeNodes = new HashMap<String, String>();
String rating = "";
JSONArray ratingArray = JSONArray.fromObject(jsonNode.getString("rating").trim());
for(Object ob : ratingArray) {
rating += ob.toString()+",";
}
treeNodes.put("rating",rating);
treeNodes.put("rank",jsonNode.getString("rank").trim());
nodes.add(treeNodes);
}
return nodes;
} /**解析json字符串最外面是{}的情况
* {"data":[{"directors":["普特鹏·普罗萨卡·那·萨克那卡林","华森·波克彭"],"rate":"8.3"},{"directors":["大卫·芬奇"],"rate":"8.7"}]}
* @throws Exception
*/
public List<Map<String, String>> toMapTwo(String jsonString)throws Exception{
//首先将jsonString字符串转化为jsonObject
JSONObject jsonNode = JSONObject.fromObject(jsonString);
//然后获取json中data的值
JSONArray jsonArray = JSONArray.fromObject(jsonNode.getString("data"));
List<Map<String, String>> nodes = new ArrayList<Map<String, String>>();
//遍历data里边的值
for (Object object : jsonArray) {
JSONObject jsonNode2 = JSONObject.fromObject(object);
Map<String, String> treeNodes = new HashMap<String, String>();
treeNodes.put("directors",jsonNode2.getString("directors"));
treeNodes.put("rate",jsonNode2.getString("rate").trim());
nodes.add(treeNodes);
}
return nodes;
}
public static void main(String[] args) throws Exception {
String jsonString = "[{\"rating\":[\"9.6\",\"50\"],\"rank\":1},{\"rating\":[\"9.6\",\"50\"],\"rank\":2}]";
String jsonString2 = "{\"data\":[{\"directors\":[\"普特鹏·普罗萨卡·那·萨克那卡林\",\"华森·波克彭\"],\"rate\":\"8.3\"},{\"directors\":[\"大卫·芬奇\"],\"rate\":\"8.7\"}]}";
JsonToObject jo = new JsonToObject();
List<Map<String, String>> listMap = jo.toMapOne(jsonString);
List<Map<String, String>> listMap2 = jo.toMapTwo(jsonString2);
//上面获取到了json的数据并且封装到list集合中去,并且list
//里面封装的是map集合
for (Map<String, String> map : listMap) {
String rating = map.get("rating");
String rank = map.get("rank");
System.out.println("rating: "+rating);
System.out.println("rank: "+rank);
}
for (Map<String, String> map : listMap2) {
String directors = map.get("directors");
String rate = map.get("rate");
System.out.println("directors: "+directors);
System.out.println("rate: "+rate);
} }
}

  运行的结果:

对于toMapOne里的函数调试的变量值情况:

json数组的解析的更多相关文章

  1. JSON数组字典解析

    遇到这样的字典数组字符串 priceRange = "[{\"id\":149075584861800,\"price\":9.9,\"nu ...

  2. java读取本地json数组并解析

    1.本地json位置 2,json数据 {"garbages":[{"id":"/m/011k07","ename":& ...

  3. JSON 数组的遍历解析

    刚遇到一个接接口任务,发现其中返回数据中,是个字符串数组,数组中就是单个json形式的内容,其实应该也可以称这种数据叫做json数组吧,只不过是字符串形式.而我需要的是将这种内容解析出来,取到对于ke ...

  4. 使用QtScript库解析Json数组例子

    本文转载自:http://blog.sina.com.cn/s/blog_671732440100uwxh.html 使用qtscipt库解析json数组首先在工程文件中加 QT        += ...

  5. 解析json数组

    解析json数组 JSONArray jsonArray = new JSONArray(markingStr); int iSize = jsonArray.length(); for (int i ...

  6. Js前端传递json数组至服务器端并解析的实现。

    最近做的一个小项目中需要将json数组数据传递到服务器端进行保存,现分享一下解决思路. 环境:EasyUi+Mvc 4.0 如下: 在上述截图中的红色圈起来的部分,需要在点击保存后通过一次ajax请求 ...

  7. Gson解析Json数组

    需求:从steam官网获取英雄数据,即为Json数据,并导入到本地数据库 Json数据是这样的 { "result": { "heroes": [ { &quo ...

  8. 双层嵌套json字符串(即json对象内嵌json数组)解析为Map

    之前我层写过一篇文章,介绍了json与map的相互转化,但当时只涉及到单一的json对象或json数组,对json对象内嵌套这json数组的json字符串无法处理,这篇文章主要解决这个问题. 之前的那 ...

  9. Java解析json字符串和json数组

    Java解析json字符串和json数组 public static Map<String, String> getUploadTransactions(String json){ Map ...

随机推荐

  1. Odoo 学习 【二】Environment 概览

    Environment 参考链接: http://odoo-new-api-guide-line.readthedocs.io/en/latest/environment.html#environme ...

  2. Install OpenCV 3.0 and Python 2.7+ on Ubuntu

    为了防止原文消失或者被墙,转载留个底,最好还是去看原贴,因为随着版本变化,原贴是有人维护升级的 http://www.pyimagesearch.com/2015/06/22/install-Open ...

  3. WebSocket 和 Golang 实现聊天功能

    http://www.open-open.com/lib/view/open1416379948711.html 这个示例应用程序展示了如何使用 WebSocket, Golang 和 jQuery  ...

  4. ThinkPHP5从零基础搭建CMS系统(一)

    了解学习thinkphp5应该是2016年年底的事情,当时还没有接触过thinkphp3版本,觉得通过手册直接上手学习tp5蛮轻松的,现在从零记录下,搭建可扩展的CMS. 1.ThinkPHP环境搭建 ...

  5. C#高级编程笔记之第三章:对象和类型

    类和结构的区别 类成员 匿名类型 结构 弱引用 部分类 Object类,其他类都从该类派生而来 扩展方法 3.2 类和结构 类与结构的区别是它们在内存中的存储方式.访问方式(类似存储在堆上的引用类型, ...

  6. ccos2d-x 学习

    渲染驱动方式,事件驱动方式 this->addChild(pSprite, 0); 的第二个参数(int zOrder)表示要添加到this类对象中的顺序.是由里向外的方向.值越大表示越在外面. ...

  7. Tornado day1

    Tornado 之路由配置 首先导入模块,使用Application方法中可配置多个路由,格式必须为列表中是元组 元组的第一个是配置的url,第二个参数时自定义的类(继承自RequestHandler ...

  8. bootstrap-table 列宽问题解决

    <th style="width:120px" data-field="Cel1"><div class="th-inner &qu ...

  9. 基于 HTML5 WebGL 的低碳工业园区监控系统

    前言 低碳工业园区的建设与推广是我国推进工业低碳转型的重要举措,低碳工业园区能源与碳排放管控平台是低碳工业园区建设的关键环节.如何对园区内的企业的能源量进行采集.计量.碳排放核算,如何对能源消耗和碳排 ...

  10. unity3d从入门到精通要掌握什么内容

    Unity3d就业方向广.游戏行业占据了65%的比例,也有虚拟现实,增强现实等方向,就业前景火爆.可以从事的岗位:游戏开发工程师.移动应用开发工程师.游戏场景设计师.游戏特效设计师.VR开发工程师.A ...