我正在使用Spring Boot 2.0.3创建一个项目,其中我必须解析json并使用其键获取值。我的问题是我有一个密钥,它存在于json的多个级别上,我想获取所有出现的值。例如,下面是我正在使用的对象:-
{
"test": {
id:1,
name:"test1",
class:"test2"
},
"boolean": true,
"color": "#82b92c",
"null": null,
"number": 123,
"object_": {
"a": "b",
"c": "d",
"e": "f",
"test": {
id:2,
name:"test1",
class:"test2"
}
},
"object": {
"object": {
"test": {
id:3,
name:"test1",
class:"test2"
}
},
"test": {
id:4,
name:"test1",
class:"test2"
}
},
"string": "Hello World"
}
现在有四次键 test 出现了,我想获取它的所有值。 请提出如何获取其价值的建议。
答案 0 :(得分:0)
如果您将Java DTO类用作控制器方法参数(以便Spring Boot自动进行转换),则将具有嵌套JSON对象的嵌套DTO。
您的情况如下:
public class TestDto {
int id;
String name;
String clazz; //can't use class as it is reserved keyword
}
public class Body {
TestDto test;
}
顺便说一句,我认为几个test
键不是有效的JSON。
答案 1 :(得分:0)
希望下面的递归逻辑将有助于解析Json。
public static void main(String[] args) {
JacksonJsonParser parser= (JacksonJsonParser) JsonParserFactory.getJsonParser();
Map jsonMap=parser.parseMap("{\"test\":{\"id\":1,\"name\":\"test1\",\"class\":\"test2\"},\"boolean\":true,\"color\":\"#82b92c\",\"null\":null,\"number\":123,\"object_\":{\"a\":\"b\",\"c\":\"d\",\"e\":\"f\",\"test\":{\"id\":2,\"name\":\"test1\",\"class\":\"test2\"}},\"object\":{\"object\":{\"test\":{\"id\":3,\"name\":\"test1\",\"class\":\"test2\"}},\"test\":{\"id\":4,\"name\":\"test1\",\"class\":\"test2\"}},\"string\":\"Hello World\"}");
getTestDetails(jsonMap);
}
private static void getTestDetails(Map jsonMap) {
for(Object key:jsonMap.keySet()){
if("test".equals(key.toString())){
System.out.println(jsonMap.get(key));
}else{
if(jsonMap.get(key) instanceof Map){
getTestDetails((Map)jsonMap.get(key));
}
}
}
}
答案 2 :(得分:0)
您可以使用org json库从字符串中读取JSON。
https://mvnrepository.com/artifact/org.json/json/20140107
一旦罐子就位。
以下代码应使用键“ test”打印所有json
public static void main(String[] args) {
String jsonString = "{\"test\": {\"id\":1,\"name\":\"test1\",\"class\":\"test2\"},\"boolean\": true,\"color\": \"#82b92c\",\"null\": null,\"number\": 123,\"object_\": {\"a\": \"b\",\"c\": \"d\",\"e\": \"f\", \"test\": { \"id\":2, \"name\":\"test1\", \"class\":\"test2\" } }, \"object\": { \"object\": { \"test\": { \"id\":3, \"name\":\"test1\", \"class\":\"test2\" } }, \"test\": { \"id\":4, \"name\":\"test1\", \"class\":\"test2\" } }, \"string\": \"Hello World\"}";
JSONObject json = new JSONObject(jsonString);
System.out.println(json);
Iterator keys = json.keys();
getTestKeyObj(json);
}
public static void getTestKeyObj(JSONObject jsonObj) {
Iterator keys = jsonObj.keys();
while( keys.hasNext() ) {
String key = (String)keys.next();
if(key.equalsIgnoreCase("test")) {
System.out.println("Test JSON: "+jsonObj.get(key));
}else {
if ( jsonObj.get(key) instanceof JSONObject ) {
getTestKeyObj((JSONObject) jsonObj.get(key));
}
}
}
}