一直以来,经常会遇到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. Day20 Django的使用_基础

    老师网址: https://www.cnblogs.com/yuanchenqi/articles/7652353.html 1,复习上级课,一对一,一对多,多对多的使用 models.py: cla ...

  2. 自定义ListView android

    定义一个实体类,作为ListView的适配器的适配类型.其中name为水果名称.imageId为水果的图片(图片资源可以随便弄几个占用) public class Fruit { private St ...

  3. 你需要知道的Android拍照适配方案

    拍照功能实现 Android 程序上实现拍照功能的方式分为两种:第一种是利用相机的 API 来自定义相机,第二种是利用 Intent 调用系统指定的相机拍照.下面讲的内容都是针对第二种实现方式的适配. ...

  4. SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...

  5. Dubbo学习-源码学习

    Dubbo概述 dubbo框架提供多协议远程调用,服务提供方可以是分布式部署.dubbo框架可以很简单的帮我们实现微服务. 此处援引官网上图片 dubbo分为客户端和服务提供方 服务方将服务注册到注册 ...

  6. SpringBoot cache-control 配置静态资源缓存 (以及其中的思考经历)

    昨天在部署项目时遇到一个问题,因为服务要部署到外网使用,中间经过了较多的网络传输限制,而且要加载arcgis等较大的文件,所以在部署后,发现页面loading需要很长时间,而且刷新也要重新从服务器下载 ...

  7. Total Command使用笔记

    一.快键键(基于水晶2右)以下数字小键盘无效 Tab 左右窗口切换 Ctrl+d 进入工作目录ctrl+d+数字 指定目录alt+←/→ 后退/前进目录ctrl+\ 跳转到根目录Ctrl+b,不分层级 ...

  8. AbstractQueuedSynchronizer原理及代码分析

    一.AQS简介 AbstractQueuedSynchronizer(AQS)是java.util.concurrent并发包下最基本的同步器,其它同步器实现,如ReentrantLock类,Reen ...

  9. Java操作Memcached

    本文复制其他播客,有好的技术文章希望各位大神能告知... 谢谢. 如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; import j ...

  10. CAP原理和BASE思想

    分布式领域CAP理论,Consistency(一致性), 数据一致更新,所有数据变动都是同步的Availability(可用性), 好的响应性能Partition tolerance(分区容错性) 可 ...