Java中JSONObject相关操作
maven项目pom配置:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
import net.sf.json.JSONObject; //报文
String report="{\"SEND_TIME\":\"20170509235000\",\"AREA_SOURCE\":\"ZSQD\",\"ACID\":\"QDA9772\",\"TASK\":\"W/Z\","
+ "\"PLAN_SOURCE\":\"QDNEXTPLAN\",\"ADEP\":\"ZUUU\",\"ADES\":\"ZSQD\",\"STOD\":\"0240\",\"STOA\":\"0525\","
+ "\"ETOT\":\"0240\",\"ELDT\":\"0525\",\"AIRCRAFT_TYPE\":\"A320\",\"REGID\":\"B1648\",\"EXECUTE_DATE\":\"20170510\"}";
//转json对象(反序列化)
JSONObject jsonObject = JSONObject.fromObject(report);
//强转成PlanReport类
PlanReport hbreport=(PlanReport)JSONObject.toBean(jsonObject,PlanReport.class);
//序列化
jsonObject.toString();
//json合并 相同的字段会被后一个覆盖
JSONObject oldjson1=new JSONObject(); oldjson1.put("name", "zhangsan"); JSONObject oldjson2=new JSONObject(); oldjson2.put("name", "lisi");
oldjson2.put("age", "20"); //合并后的json
JSONObject newjson=new JSONObject(); newjson.putAll(oldjson1);
newjson.putAll(oldjson2);
json对比:
/**
*
* 对比json对象中不同的value
*
*/
public static String compareJson(JSONObject json1, JSONObject json2,String key) {
String str="";
@SuppressWarnings("unchecked")
Iterator<String> i = json1.keys();
while (i.hasNext()) {
key = i.next();
str+= compareJson(json1.get(key), json2.get(key),key);
}
return str;
}
public static String compareJson(Object json1,Object json2,String key) {
String str ="";
if ( json1 instanceof JSONObject ) {
str=compareJson((JSONObject) json1 ,(JSONObject) json2,key);
}else if ( json1 instanceof JSONArray ) {
compareJson((JSONArray) json1 ,(JSONArray) json2,key);
}else if(json1 instanceof String ){
str=compareJson((String) json1 ,(String) json2,key);
}else {
str=compareJson(json1.toString(), json2.toString(), key);
}
return str;
}
public static String compareJson(String str1,String str2,String key) {
String str="";
if (!str1.equals(str2)&& str2!=null) {
//System.out.println("字段更新:"+key+ ",原报文数据:"+ str1 +",新报文数据:"+str2);
str="字段更新:"+key+ ",原报文数据:"+ str1 +",新报文数据:"+str2+" ";
}
return str;
}
public static void compareJson(JSONArray json1,JSONArray json2,String key) {
Iterator<?> i1= json1.iterator();
Iterator<?> i2= json2.iterator();
while ( i1.hasNext()) {
compareJson(i1.next(), i2.next(),key);
}
}
json中不同字段对比,可以先转换成类再用反射技术进行对比
//通过反射获取到不同的属性
List<String> textList = Lists.newArrayList();
String jsonstr="";
try {
Class<? extends PlanReport> clazz = hbreport.getClass();
Field[] fields = hbreport.getClass().getDeclaredFields();
for (Field field : fields) {
PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
Method getMethod = pd.getReadMethod();
Object o1 = getMethod.invoke(oldreport);
Object o2 = getMethod.invoke(hbreport);
String s1 = o1 == null ? "" : o1.toString();//避免空指针异常
String s2 = o2 == null ? "" : o2.toString();//避免空指针异常 if (!s1.contains(s2)) {
textList.add("字段新增:" + field.getName() + " 字段值:" + s2 + " ");
}
}
} catch (Exception e) {
logger.info("计划日志字段新增反射异常日志打印 [{}]", e);
System.out.println(e.getMessage());
}
for (String object : textList) {
jsonstr+=object;
}
JSONArray遍历:转换Iterator(迭代器)进行遍历
String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'},{name:'d',value:'dd'}]" ;
JSONArray jsonarr = JSONArray.fromObject(str );
Iterator<Object> it = jsonarr.iterator();
while (it.hasNext()) {
JSONObject jsonObject = (JSONObject) it.next();
System.out.println(jsonObject.toString());
}
JSONArray 中按照某个Key排序:
JSONArray JsonArray=new JSONArray();
JsonArray.add(***);
//从小到大
JsonArray.sort(new Comparator<JSONObject>() {
@Override
public int compare(JSONObject o1, JSONObject o2) {
return o1.getString("SEND_TIME").compareTo(o2.getString("SEND_TIME"));
}
});
Java中JSONObject相关操作的更多相关文章
- Java中字符串相关操作(判断,增删,转换)
1:判断字符串中是否包含某个字符(字符串): startsWith(): 这个方法有两个变体并测试如果一个字符串开头的指定索引指定的前缀或在默认情况下从字符串开始位置 此方法定义的语法如下: publ ...
- java文件夹相关操作 演示样例代码
java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...
- Java并发--Java中的CAS操作和实现原理
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/CringKong/article/deta ...
- 理解CSV文件以及ABAP中的相关操作
在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑.它仅仅是一种被逗号分割的文本文档吗? 让我们先来看看接下来可能要处理的几个相关组件的词汇的语义. Separat ...
- JAVA中的时间操作
java中的时间操作不外乎这四种情况: 1.获取当前时间 2.获取某个时间的某种格式 3.设置时间 4.时间的运算 好,下面就针对这四种情况,一个一个搞定. 一.获取当前时间 有两种方式可以获得,第一 ...
- 【Socket编程】Java中网络相关API的应用
Java中网络相关API的应用 一.InetAddress类 InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)地址. InetAddress类没有构造方法,所以不能直接new出 ...
- java中的集合操作类(未完待续)
申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...
- JAVA中通过Jedis操作Redis连接与插入简单库
一.简述 JAVA中通过Jedis操作Redis连接与插入简单库 二.依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis ...
- Java中的文件操作(一)RandomAccessFile
今天,学到的是java中的文件操作. Java.IO.File Java中操作文件用到RandomAccessFile类,既可以读取文件内容,也可以向文件输出数据,但不同与普通输入/输出流的是Rand ...
随机推荐
- Lucene 个人领悟 (三)
其实接下来就是贴一下代码,熟悉一下Lucene的正常工作流程,或者说怎么使用这个API,更深层次的东西这篇文章不会讲到. 上一篇文章也说了maven的配置,只要你电脑联网就可以下载下来.我贴一下代码. ...
- POSIX rename语义
POSIX对rename行为的定义如下(http://www.opengroup.org/onlinepubs/009695399/functions/rename.html): 将一个文件重命名为一 ...
- Maven笔记 #01# 入门
索引 Maven是干什么的? 用Maven的好处 Maven与命令行 Maven与IntelliJ IDEA 一.Maven是干什么的? 我相信只要你写过足够多的代码,就... 肯定有思考过写一个脚本 ...
- hihocoder [Offer收割]编程练习赛14
A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把 ...
- python之接口与抽象类
一.接口与归一化设计 1.什么是接口 1)是一组功能集合 2)接口的功能是用于交互 3)接口只定义函数,但不涉及函数的实现 4)这些功能是相关的 2.为什么要用接口 接口提取了一群类共同的函数,然后让 ...
- socket之 select模型
前段时间一直想学习网络编程的select模型,看了<windows网络编程>的介绍,参考了别人的博客. 这里的资料主要来自http://www.cnblogs.com/RascallySn ...
- opencv学习之路(17)、边缘检测
一.概述 二.canny边缘检测 #include "opencv2/opencv.hpp" using namespace cv; void main() { //Canny边缘 ...
- AnswerOpenCV(1001-1007)一周佳作欣赏
外国不过十一,所以利用十一假期,看看他们都在干什么. 一.小白问题 http://answers.opencv.org/question/199987/contour-single-blob-with ...
- rpm command
rpm 实现程序管理 安装:-ivh ,--nodeps ,--replacepkgs 卸载: -e, --nodeps 升级: -Uvh -Fvh , --nodeps, --oldpackag ...
- Windows操作系统下安装Ubuntu虚拟机
认识VMware虚拟机 VMware(虚拟机)是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统,它能在Windows系统上虚拟出多个计算机,每个虚拟计算机可以独立运行 ...