json数组的解析
一直以来,经常会遇到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数组的解析的更多相关文章
- JSON数组字典解析
遇到这样的字典数组字符串 priceRange = "[{\"id\":149075584861800,\"price\":9.9,\"nu ...
- java读取本地json数组并解析
1.本地json位置 2,json数据 {"garbages":[{"id":"/m/011k07","ename":& ...
- JSON 数组的遍历解析
刚遇到一个接接口任务,发现其中返回数据中,是个字符串数组,数组中就是单个json形式的内容,其实应该也可以称这种数据叫做json数组吧,只不过是字符串形式.而我需要的是将这种内容解析出来,取到对于ke ...
- 使用QtScript库解析Json数组例子
本文转载自:http://blog.sina.com.cn/s/blog_671732440100uwxh.html 使用qtscipt库解析json数组首先在工程文件中加 QT += ...
- 解析json数组
解析json数组 JSONArray jsonArray = new JSONArray(markingStr); int iSize = jsonArray.length(); for (int i ...
- Js前端传递json数组至服务器端并解析的实现。
最近做的一个小项目中需要将json数组数据传递到服务器端进行保存,现分享一下解决思路. 环境:EasyUi+Mvc 4.0 如下: 在上述截图中的红色圈起来的部分,需要在点击保存后通过一次ajax请求 ...
- Gson解析Json数组
需求:从steam官网获取英雄数据,即为Json数据,并导入到本地数据库 Json数据是这样的 { "result": { "heroes": [ { &quo ...
- 双层嵌套json字符串(即json对象内嵌json数组)解析为Map
之前我层写过一篇文章,介绍了json与map的相互转化,但当时只涉及到单一的json对象或json数组,对json对象内嵌套这json数组的json字符串无法处理,这篇文章主要解决这个问题. 之前的那 ...
- Java解析json字符串和json数组
Java解析json字符串和json数组 public static Map<String, String> getUploadTransactions(String json){ Map ...
随机推荐
- spring 配置多数据源(mysql读写分离)
前段时间刚换了家新公司,然后看项目代码里用了数据库读写分离的架构,然后好奇扒了代码简单看了下,总体来说就是运用spring aop切面方式来实现的.看明白后就在自己的个人小项目里运用了下,测试OK,所 ...
- Jedis连接池对Redis数据操作
[效果图] [前言] Redis是常用于缓存的非关系型数据库,感觉更像加强型的HashMap的用法,依靠Key和Value保存数据.官方推荐用Jedis来操作Redis数据库,使用和JDBC差不多,一 ...
- Flask框架之 - 简易静态网站 !
网站截图: Python源代码如下: # coding=utf-8 from flask import Flask,render_template app = Flask(__name__) @app ...
- 【读书笔记】C++Primer---第二章
1.C++基本数据类型:字符型.整型.浮点型等: 2.算术类型如下表,下表只是表示C++要求的最小储存空间,但是一般编译器使用的都比所要求的储存空间大,以前类型所能表示的最大值也因机器的不同而有不同的 ...
- jsonp学习
使用 JSONP 实现跨域通信:http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/
- 面试(三)---volatile
一.前言 最近去成都玩了一圈,整体感觉还不错,辞职以后工作找的也很顺利,随着年龄增加自己也考虑定居和个人长期发展的问题,反正乱七八糟的事,总之需要好好屡屡思路,不能那么着急下定论,当然我对 ...
- 通过Django Channels设计聊天机器人WEB框架
这两个月都在忙着设计针对银联客服业务的智能聊天机器人,上一周已经交完设计报告,这一周还和部门同事一起分享了系统设计及运行效果.因为时间的关系,系统原型我使用了Flask+jQuery的组合,感觉用以原 ...
- HTML DOM innerHTML 属性及实现图片连续播放
定义和用法 innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML. 语法 tablerowObject.innerHTML=HTML 实例 下面的例子返回了表格行的 inner H ...
- SpringBoot19 集成SpringSecurity01 -> 环境搭建、SpringSecurity验证
1 环境搭建 1.1 创建一个SpringBoot项目 项目脚手架 -> 点击前往 1.2 创建一个Restful接口 新建一个Controller类即可 package com.example ...
- Oracle数据库表分区
一.Oracle数据库表分区概念和理解 1.1.已经存在的表没有方法可以直接转化为分区表. 1.2.不在分区字段上建立分区索引,在别的字段上建立索引相当于全局索引.效率 ...