为什么80%的码农都做不了架构师?>>>   

2016/10/18更新

之前做的解析都是错误的,因为在最里层循环添加对象,会出现同一个key对应的对象被之后创建的对象覆盖。在边上大牛的协助之下,成功完成了在三层循环中正确地创建符合原json结构的jsonObject对象。

之后,又想起了可guava的HashTable类,他的两个key一个value的数据结构也能正确处理这种表格类型的数据,而且只用两层循环。所以说工作中需要先解决需求问题,再考虑效率或代码结构,毕竟如果连需求都完不成就啥也别说了

在工作时遇到一个问题,从一个网站的接口取得数据,再根据某个条件,将里面的数据提取出来。

一开始的思路是根据条件,删除不符合条件的元素,后来发现还是有问题,结果集不符合前端的要求,因为可能会出现这种数据:{'2016-10-10':{'123123123':[]}},它虽然是个合法的json字符串,但是里面并没有任何数据,'123123123'这个key里是空数组,最终结果需要返回null。后来经过pm的提醒,选用了只提取符合条件的元素,再将其添加进一个空json对象中。我选择了gson作为工具,这个东东虽然在大数据量的时候处理速度慢,但是小量数据的时候还是挺快的,并且api好用,符合面向对象的思想。至于json处理api哪个效率高百度即可。

Document document = Jsoup.connect("http://rl.fx678.com/ajaxcountry.html?date=20161011&country=%E7%BE%8E%E5%85%83").header("X-Requested-With", "XMLHttpRequest").ignoreContentType(true).timeout(50000).get();String text = document.body().text();System.out.println(text);Gson gson = new Gson();JsonObject object = gson.fromJson(text, JsonObject.class);JsonObject result = new JsonObject();Set<Entry<String, JsonElement>> level1 = object.entrySet();for(Entry<String, JsonElement>level1Entry:level1){JsonObject asJsonObject = level1Entry.getValue().getAsJsonObject();Set<Entry<String, JsonElement>> level2 = asJsonObject.entrySet();for(Entry<String, JsonElement> level2Entry:level2){JsonArray array = level2Entry.getValue().getAsJsonArray();Iterator<JsonElement> iterator = array.iterator();while(iterator.hasNext()){JsonObject asJsonObject2 = iterator.next().getAsJsonObject();String string = asJsonObject2.get("ACTUAL_PRICE").toString();System.out.println(string);//未公布
//                  if(asJsonObject2.get("ACTUAL_PRICE").toString().equals("")){
//                      JsonObject object2 = new JsonObject();
//                      object2.add(level2Entry.getKey(), array);
//                      result.add(level1Entry.getKey(), object2);
//                      break;
//                  }
//                  重要String s = asJsonObject2.get("IDX_RELEVANCE").getAsString();
//                  if("3".equals(s)){
//                      JsonObject object2 = new JsonObject();
//                      object2.add(level2Entry.getKey(), array);
//                      result.add(level1Entry.getKey(), object2);
//                      break;
//                  }//已公布if(!"".equals(string)){JsonObject object2 = new JsonObject();object2.add(level2Entry.getKey(), array);result.add(level1Entry.getKey(), object2);break;}}}}System.out.println(result.entrySet().size());System.out.println(result.toString());}

1:先从目标网站上提取数据

2.将其转换为jsonobject对象

3.遍历这个对象的entryset,为什么要用entryset是因为所有的key都是不固定的,所以必须取他的entryset

4.比较麻烦的就是遍历两层entry了,到了最后一层entryset,获取该层entryset的迭代器,对entry内的元素进迭代处理,将符合条件的元素存入一个新的json对象。

5.如何将结果存入一个新的json对象,就要使用到gson api了,相信不用看文档,只看api名称就能知道方法的作用了。需要注意的是,要从第二层开始新建对象,让外层的对象add里层的对象,这样最后得到的结果才是符合源数据的json嵌套结构。

6.说回到前端需要的结果上,如果最后的结果集的entryset大小为0,说明是一个空json对象,他的toString是“{}”这样的,它依然不是最终需要的结果,这时候就要返回null了,因为{}没有意义

7.最后说一下代码的问题,两层循环加一层while循环,三层循环,存在可读性差,代码厂的问题,至于效率我觉得除非找另一种思路处理,否则基于这个json的结构,3次循环是无法避免的,也许需要在每个循环内使用一个方法进行解析,以提升可读性

转载于:https://my.oschina.net/wwwd/blog/759241

使用Gson对复杂json对象的成员进行删选相关推荐

  1. Gson案例:Java对象与JSON字符串相互转换

    Gson案例:Java对象与JSON字符串相互转换 一.Gson概述 Gson是一个Java类库,可将Java对象转换为相应的JSON形式,也可以将JSON字符串转换为对应的Java对象.Gson是一 ...

  2. Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题

    Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题 1.将1.3的版本升级成1.7的,转换速度就非常快了 附: json数据大小

  3. fastjson判空_fastjson JSON 对象为空保留null

    fastjson,对象转json字符串的过程中对value为null的值的一些处理 前言 fastjson是一个非常好用的java库,用于操作对象json序列化等等. 问题 最近在写代码的时候遇到问题 ...

  4. bos 获取数据库连接_java解析数据接口获取json对象

    最近小编在做项目的时候,需要解析一个url以获取其数据,开始我为简便,使用了Postman这个工具来解析,也获取了json对象. 但后也发现,它没法直接连接数据库,也就是说这些数据不能直接存入数据库, ...

  5. java 视图对象转换,使用spring boot开发时java对象和Json对象转换的问题_JavaScript_网络编程...

    将java对象转换为on对象,市面上有很多第三方jar包,如下: jackson(最常用) com.fasterxml.jackson.core jackson-databind 2.11.2 gso ...

  6. java使用getinputstream_java解析数据接口获取json对象

    最近小编在做项目的时候,需要解析一个url以获取其数据,开始我为简便,使用了Postman这个工具来解析,也获取了json对象. 但后也发现,它没法直接连接数据库,也就是说这些数据不能直接存入数据库, ...

  7. Java对象转换为Json对象

    前言 曾几何时,XML是程序员的宠儿,是数据传输.API.AJAX应用等方面的不二选择,但自从JSON横空出世后,或者你会发觉你身边就有很多人开始抛弃XML,在他们的心目中,JSON已经完全取代了XM ...

  8. jQuery调用WCF服务传递JSON对象

    下面这个示例使用了WCF去创建一个服务端口从而能够被ASP.Net页面通过jQuery的AJAX方法访问,我们将在客户端使用Ajax技术来 与WCF服务进行通信.这里我们仅使用jQuery去连接Web ...

  9. 十分钟搞懂JSON(JSON对象---JSON字符串---对象 之间的区别)

    好记性不如烂笔头,相信我,看了之后你会彻底搞懂JSON 前言:前天被JSON对象,JSON字符串,JAVA对象搞混了,不知道各自代表的意思,我就查了资料,总结为一篇博文. 另外我想List<Us ...

最新文章

  1. ubuntu登录界面循环登录
  2. 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法
  3. find 命令的参数详解
  4. shell之计算文本中单词出现频率
  5. tf.group()用于组合多个操作
  6. 出现问题protected:void __thiscall CTalkCDlg::OnIdok(void)(?OnIdok@CTalkDlg@@IAEXXZ)?
  7. 日期相关的小函数汇总
  8. Android-VR 支持流媒体
  9. visual studio 显示行号
  10. VHDL串口通信 在FPGA开发板上测试 并解决没有识别到下载接口USB_Blaster(No Hardware问题)
  11. android实时投屏软件下载,安卓投屏助手
  12. 人脸识别模型评价指标:完整梳理
  13. Qt5.12 QML——TextMetrics字体长度的测量指标
  14. MySQL ('root'@'%') does not exist的问题
  15. 为什么需要云计算机,为什么需要云计算?
  16. 超全!互联网大厂职级薪资表,全国各地互联网大厂分布(校招/社招/考研/考公)
  17. 推荐28个网站,让你边玩边学
  18. Rust 社区 RFC 导读 | 构建安全的 I/O
  19. 新电脑安装python环境
  20. 关于接入新浪微博第三方登录

热门文章

  1. Windbg dump分析 学习总结
  2. 图解观察托管程序线程
  3. Understand分析Kinect SDK 1.7自带例子(C++)图集二
  4. Yii2.0 limit(1)与one()
  5. 数组的reduce方法
  6. Python之创建单元素tuple
  7. 等了半个多月的悟空宝终身寿险
  8. java stopwatch 功能
  9. 数据类型的sizeof
  10. SmartArt使用