您的位置:

java复杂json报文(解析复杂的json字符串)

java复杂json报文(解析复杂的json字符串)

更新:

本文目录一览:

用java怎么解析复杂的JSON

json-lib-2.4-jdk15.jar 这个包还另需一下几个包。

jakarta commons-lang 2.5

jakarta commons-beanutils 1.8.0

jakarta commons-collections 3.2.1

jakarta commons-logging 1.1.1

ezmorph 1.0.6

把上边的json定义为一个字符串 str,建议不要直接用还是自己动手写写。这样比较容易掌握方法。

JSONObject ob=JSONObject.fromObject(str);

Object success=ob.get("success");

Object errorMsg=ob.get("errorMsg");

System.out.println(success);

System.out.println(errorMsg);

JSONObject data=ob.getJSONObject("data");

Object total=data.get("total");

System.out.println(total);

JSONArray array=data.getJSONArray("rows");

JSONObject rows=null;

for(int i=0;iarray.size();i++){

rows=array.getJSONObject(i);

Object id=rows.get("id");

System.out.println(id);

Object workName=rows.get("workName");

System.out.println(workName);

Object assigneeName=rows.get("assigneeName");

System.out.println(assigneeName);

Object name=rows.get("name");

System.out.println(name);

Object processInstanceInitiatorName=rows.get("processInstanceInitiatorName");

System.out.println(processInstanceInitiatorName);

Object processInstanceStartTime=rows.get("processInstanceStartTime");

System.out.println(processInstanceStartTime);

Object createTime=rows.get("createTime");

System.out.println(createTime);

Object dueDate=rows.get("dueDate");

System.out.println(dueDate);

}

Java的json反序列化:Java数据类可以和json数据结构不一致吗?

由于时间关系我也没有写全,这里提供一个思路吧。代码如下:

Account.java:

@Data

public class Account {

private int id;

private String name;

// @PowerfulAnnotation注解是我臆想的

@PowerfulAnnotation("token.id")

private String tokenId;

@PowerfulAnnotation("token.key")

private String key;

}

PowerfulAnnotation.java:

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface PowerfulAnnotation {

String value() default "";

}

测试类Main.java:

public class Main {

public static void main(String[] args) throws Exception {

Account account = new Account();

String ori = "{\n" +

"\"id\": 11111,\n" +

"\"name\": \"小李\",\n" +

"\"token\": {\n" +

"\"id\": 22222222,\n" +

"\"key\": \"ddddddddd\"\n" +

"}\n" +

"}";

Gson gson = new Gson();

//字符串json转JsonObject

JsonObject jsonObject = gson.fromJson(ori, JsonObject.class);

//反射获取目标对象属性

for (Field field : account.getClass().getDeclaredFields()) {

String fieldName = field.getName();

Class fieldClass = field.getType();

System.out.print("当前field名:[" + fieldName + "],");

System.out.println("当前field类型:[" + fieldClass + "]");

Annotation annotation = field.getDeclaredAnnotation(PowerfulAnnotation.class);

//检查是否有PowerfulAnnotation注解

if (annotation != null) {

PowerfulAnnotation powerful = (PowerfulAnnotation) annotation;

String powerfulValue = powerful.value();

System.out.println("发现PowerfulAnnotation注解,值为:[" + powerfulValue + "]");

String[] tmp = powerfulValue.split("\\.");

//声明一个临时JsonObject,将用于获取下一层json对象

JsonObject tmpJson = jsonObject;

for (int i = 0; i tmp.length; i++) {

//目标值是在powerfulValue的最后一个字段,例如powerfulValue为token.id的话,目标的值就是id,所以先获取token这个jsonObject,并赋值给临时tmpJson

if (i != tmp.length - 1) {

tmpJson = jsonObject.get(tmp[i]).getAsJsonObject();

} else {

//到达powerfulValue的最后一个字段,检查其类型,并赋值给目标对象

Object value = checkFieldType(tmpJson, tmp[i], fieldClass);

//从目标对象中获取目标属性

Field targetField = account.getClass().getDeclaredField(field.getName());

targetField.setAccessible(true);//解除私有限制

System.out.println("将[" + powerfulValue + "]的值[" + value + "]赋给目标对象的[" + fieldName + "]");

//将值赋值给目标属性

targetField.set(account, value);

}

}

}

//属性上没有PowerfulAnnotation注解

else {

//检查当前属性的类型

Object value = checkFieldType(jsonObject, fieldName, fieldClass);

//从目标对象中获取目标属性

Field targetField = account.getClass().getDeclaredField(field.getName());

targetField.setAccessible(true);//解除私有限制

System.out.println("直接将值[" + value + "]赋给目标对象的[" + fieldName + "]");

//将值赋值给目标属性

targetField.set(account, value);

}

System.out.println("*********************************************\n");

}

System.out.println("目标对象最终值:" + account);

}

/**

* 检查当前属性的类型

* (这里由于时间关系,我没有写全,只检查了String、int、boolean类型,全类型应包括boolean、char、byte、short、int、long、float、double,你有时间自己补充一下)

*

* 如果发现当前属性是一个对象,那么应该将JsonObject转换成对应的对象再返回(由于时间关系,这里我也没有试过,总之思路是这样)

*/

private static Object checkFieldType(JsonObject field, String fieldName, Class fieldClass) {

if (fieldClass == String.class) {

return field.get(fieldName).getAsString();

}

if (fieldClass == int.class) {

return field.get(fieldName).getAsInt();

}

if (fieldClass == boolean.class) {

return field.get(fieldName).getAsBoolean();

}

return new Gson().fromJson(field.get(fieldName), fieldClass);

}

}

代码还没写完,主要集中在没有对JsonArray进行处理,当json串里包含数组时会报错,另外一些没写完的我在注释里写了点,你可以参照一下。整体思路还是利用java反射机制进行。

以上代码运行结果:

怎样利用java生成json复杂对象

1利用:json-lib-2.2.3-jdk13.jar

2使用方法举例:

JSONObject.fromObject(bean).toString() --返回{"aa": "xx","bb":"xxx"} (bean为java对象,有aa和bb两个字段,值分别为xx 和 xxx)

JSONObject.fromObject(map).toString() -- 返回{"aa": "xx","bb":"xxx"} (map)为

HashMap对象,里面有aa和bb两个key,value分别为xx 和xxx

JSONArray.fromObject(list).toString() -- 返回[{"aa": "xx", "bb":"xxx"}, {"cc":"xxxx", "dd":"xxxxx"}] (list为ArrayList对象,里面有两个HashMap对象)

3. 其他使用方法请百度

怎么用java对象表示复杂的json

按照json的结构来定义bean,即bean里面的属性是另外一个bean这么写,然后一层一层的转吧。不然只能使用Map套Map来做了。

java组装复杂的json用什么包怎么用

XSTREAM 可以直接把对象转成json字符串。

具体用法百度很多的。

当然也可以用json-lib 用法如下 user是一个对象

User user=new User();

user.setId("123");

user.setName("JSONServlet");

user.setPassword("JSON");

user.setSay("Hello , i am a servlet !");

JSONObject json=new JSONObject();

json.accumulate("success", true);

json.accumulate("user", user);

java复杂json报文(解析复杂的json字符串)

本文目录一览: 1、用java怎么解析复杂的JSON 2、Java的json反序列化:Java数据类可以和json数据结构不一致吗? 3、怎样利用java生成json复杂对象 4、怎么用java对象表

2023-12-08
java解析复杂json报文(java json字符串解析)

2022-11-08
及java拼写复杂json(java好复杂)

本文目录一览: 1、java组装复杂的json用什么包怎么用 2、java后台怎么拼json字符串 3、怎样利用java生成json复杂对象 4、用java怎么解析复杂的JSON 5、怎么用java对

2023-12-08
java复杂的json,java复杂的业务逻书

本文目录一览: 1、非常复杂的一个json串,怎么转成java对象? 2、用java怎么解析复杂的JSON 3、怎样利用java生成json复杂对象 非常复杂的一个json串,怎么转成java对象?

2023-12-08
复杂json源码,复杂json数组解析

2022-11-24
json串转java对象(复杂json串转为java对象)

本文目录一览: 1、json数组转java对象怎么转? 2、json格式的字符串转换为java对象 3、json数组转java对象怎么转 json数组转java对象怎么转? 1、需要json的相关ja

2023-12-08
python拼接复杂的json的简单介绍

本文目录一览: 1、Python爬虫(七)数据处理方法之JSON 2、python如何动态拼json字符串 3、如何用python处理json文件 4、【Python】浅谈python中的json 5

2023-12-08
使用gson解析json的实例,gson解析复杂json

2022-11-23
core解析json的笔记(c json解析)

本文目录一览: 1、如何解析json中map数据 2、fasterxml.jackson.core.jsonparser.feature是哪个jar包的 3、spring mvc 怎么获取json 4

2023-12-08
java类json报文,java发送json报文

本文目录一览: 1、什么是JSON文件,java中如何从里面存取数据 2、java中json怎么运用? 3、Java的json反序列化:Java数据类可以和json数据结构不一致吗? 什么是JSON文

2023-12-08
java创建一个json字符串,java定义一个json字符

本文目录一览: 1、java如何创建Json文件? 2、java怎么拼接json字符串 3、Java如何快速构造JSON字符串 4、在 java web开发中怎么使用json? java如何创建Jso

2023-12-08
Java解析JSON报文详解

2023-05-23
cjson字符串长度,cjson解析json字符串

2022-11-24
java解析json,Java解析JSON数组

2022-11-28
JAVA JSON字符串转List详解

2023-05-21
java解析js提示(java解析json)

本文目录一览: 1、北大青鸟java培训:js解析机制与闭包分析? 2、java 解析js的json数据 3、java如何解析javascript 北大青鸟java培训:js解析机制与闭包分析? 随着

2023-12-08
Java字符串转JSON对象的详细探讨

2023-05-20
数据库json串(json数组和json字符串)

本文目录一览: 1、求一个数据库函数解析json 如下图要求 2、存很多超级长的JSON字符串,用什么存储方式比较好呢? 3、Oracle数据库中怎么处理json字符串,本人小 4、什么是JSON字符

2023-12-08
java解析字符串并加入(java字符串加入字符)

2022-11-11
jsonjava,json java解析

2022-11-27