JSON:JSON对象和JSON数组混排的复杂字符串
在java中的一个好用的JSON工具包:net.sf.json.JSONObject 和 net.sf.json.JSONArray
一 解析JSON对象和JSON数组类型混排的复杂字符串
举个例子:
要求把demo中的json字符串,解析得到需要的变量(主要任务,区别解析JSON对象和JSON数组类型):
{
    "ThroughPut": {
        "": [
            3.9986060825147764,
            101.18750156787883,
            -93.19028940284933
        ],
        "": [
            10.504168194991284,
            79.32800580482753,
            -58.31966941484501
        ],
        "": [
            9.666977655396506,
            65.97470645709711,
            -46.64075114630414
        ]
     },
    "ActiveThreadsNum": {
        "": [
            18.99998334015418,
            23.9064418688091,
            14.093524811499258
        ],
        "": [
            18.49632839078893,
            22.00327709020313,
            14.989379691374722
        ],
        "": [
            20.37540941538413,
            23.282270617546928,
            17.46854821322133
        ]
   }
}
方案:
1解析JSON对象:strRead是上面的字符串demo,首先解析成JSONObject对象;
net.sf.json.JSONObject json_Arr = net.sf.json.JSONObject.fromObject(strRead);
2遍历JSONObject对象的所有key值,目的是取对应的value;
例如, 上面的demo:
(1)关键字:ThroughPut ;
值:{ "1461546080": [ 18.99998334015418, 23.9064418688091, 14.093524811499258 ], "1461546140": [ 18.49632839078893, 22.00327709020313, 14.989379691374722 ], "1461546200": [ 20.37540941538413, 23.282270617546928, 17.46854821322133 ]};
(2)由于value又是一个JSONObject,继续net.sf.json.JSONObject.fromObject(jsonObjStr),解析成JSONObject对象;
关键字:"1461546080":
值:[ 18.99998334015418, 23.9064418688091, 14.093524811499258 ]
for (Object key1 : json_Arr.keySet()) {
                String jsonObjStr = json_Arr.get(key1).toString();
                net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(jsonObjStr); 
3发现上面的值又是一个JSONArray类型,所以需要解析JSONArray;
net.sf.json.JSONArray jsonArr = net.sf.json.JSONArray.fromObject(tmp.toString());将输入的字符串[ 18.99998334015418, 23.9064418688091, 14.093524811499258 ]解析成JSONArray;
JSONArray是必须以[开头的字符串。
jsonArr.getDouble(1)得到第一个浮点型数值18.99998334015418
jsonArr.getDouble(2)得到第二个浮点型数值23.9064418688091
for(Object k : jsonObject.keySet()){
                    Object tmp = jsonObject.get(k);
                    net.sf.json.JSONArray jsonArr = net.sf.json.JSONArray.fromObject(tmp.toString());
                    Double jsonMax = jsonArr.getDouble();
总结:主要就成功解析了这个复杂的混排字符串:利用这个好用的json工具包net.sf.json;注意有区别的解析array和object类型json;
一般步骤:
第一步:字符串解析成变量:
json = fromObject(str)
第二步:遍历解析的变量:key -> value 类型
for (Object key1 : json.keySet()) { String jsonObjStr = json.get(key1).toString(); }
JSON:JSON对象和JSON数组混排的复杂字符串的更多相关文章
- C# json反序列化 对象中嵌套数组 (转载)   可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
		
C# json反序列化 对象中嵌套数组 (转载) 看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的 Newtonso ...
 - jackson简单使用,对象转json,json转对象,json转list
		
添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core compile g ...
 - PHP将json或对象转成数组
		
今天老大突然给了我一个小任务,给我一个txt文件,里边是很多的json字串,要求将这些字串转换成php中的数组: 于是开足火力,用了将进5分钟的时间完成了任务,代码如下: $jsonStr = fil ...
 - C#  json反序列化  对象中嵌套数组 (转载)
		
看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的 Newtonsoft.Json (一款.NET中开源的Json序列化 ...
 - 使用Jackson来实现Java对象与JSON的相互转换的教程
		
一.入门Jackson中有个ObjectMapper类很是实用,用于Java对象与JSON的互换.1.JAVA对象转JSON[JSON序列化] 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
 - .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程
		
JSON作为一种轻量级的数据交换格式,简单灵活,被很多系统用来数据交互,作为一名.NET开发人员,JSON.NET无疑是最好的序列化框架,支持XML和JSON序列化,高性能,免费开源,支持LINQ查询 ...
 - JSON转换类(二)--List转换成Json、对象集合转换Json等
		
#region List转换成Json /// <summary> /// List转换成Json /// </summary> public static string Li ...
 - List转换成Json、对象集合转换Json等
		
#region List转换成Json /// <summary> /// List转换成Json /// </summary> public static string Li ...
 - JsonUtil对象与json互转
		
OrderDto orderDto = JsonUtil.json2Object(json, new TypeRef<OrderDto>() { }); package c ...
 
随机推荐
- java架构之路-(源码)mybatis执行流程源码解析
			
这次我们来说说Mybatis的源码,这里只说执行的流程,内部细节太多了,这里只能授之以渔了.还是最近的那段代码,我们来回顾一下. package mybatis; import mybatis.bea ...
 - Can't connect to MySQL server on 'localhost' (10038)
			
平台:win7 已经安装好数据库,但是 在连接MySQL数据库时发生问题: 经过一系列的资料查找后,得到结论MySQL没有启动 解决方法: 将MySQL加入到Windows的服务中.切换到MySQL安 ...
 - Elastic Stack 笔记(五)Elasticsearch5.6 Mappings 映射
			
博客地址:http://www.moonxy.com 一.前言 关系型数据库对我们来说都很熟悉,Elasticsearch 也可以看成是一种数据库,所以我们经常将关系型数据库中的概念和 Elastic ...
 - 前台提交数据到node服务器(post方式)
			
post方式同样有两种办法,一种是表单提交,一种是ajax提交. 在此之前需要安装一个中间件:body-parser,安装好后在app.js头部引入: bodyParser = require('bo ...
 - 用docker部署RabbitMQ环境
			
前置条件: 已经安装好docker 1.查找镜像(有2种方式) ①登录rabbitmq官网找到docker镜像,选择想要的镜像的tag https://www.rabbitmq.com/downloa ...
 - 将CDH中的hive和hbase相互整合使用
			
一..hbase与hive的兼容版本: hive0.90与hbase0.92是兼容的,早期的hive版本与hbase0.89/0.90兼容,不需要自己编译. hive1.x与hbase0.98.x或则 ...
 - 一个有意思的js块作用域问题
			
1.问题 首先把问题放出来,昨天看了一个掘友发的一个问题,然后跟我同事一起研究了一下,没找出来是为什么,然后我回来一直在想为什么,然后各种找资料研究,从各个方面找为什么,比如js上下文,作用域,js垃 ...
 - 关于win10、ubuntu双系统安装的 geom erro错误
			
安装参考这个博客:http://blog.csdn.net/pop_rain/article/details/70477085 只记录安装ubuntu过程遇到的问题: 1.分区不可用(分区按以下设置) ...
 - [Note] Clipboard.js 使用
			
clipboard.js是一个用来设置剪切板的库,小巧无依赖,但用法有点诡异,必须依赖一个DOM元素 据作者说,由于浏览器相关安全策略的缘故,无法使用下面这种方式来设置剪切板 clipboard.co ...
 - sbt 学习笔记(2)sbt生成项目导入eclipse
			
在sbt配置eclipse插件 C:\Users\Administrator\.sbt\0.13\ 新建plugins目录,在目录中新建plugins.sbt 文件内容为: addSbtPlugin( ...