我想从json对象中提取键及其值。我在具有父子关系的json中有3个对象,名为 1.父母 2. childOne_OfParent和 3. child_OF_childOne。 我想从child_OF_childOne中提取“ userQueryId”的所有值,并将其存储到字符串类型变量中。 我该如何执行。预先感谢。
我的Json对象是:
{
"createdBy": "****",
"dashboardId": 1,
"childOne_OfParent": [
{
"createdBy": null,
"dashboardSectionId": 1,
"child_OF_childOne": [
{
"createdBy": "XYZ",
"userQueryId": "283"
},
{
"createdBy": "ABC",
"userQueryId": "284"
},
{
"createdBy": "AWS",
"userQueryId": "285"
}
]
}
]
}
答案 0 :(得分:1)
您可以使用json创建这样的模型Java类。我使用您的json通过站点https://codebeautify.org/json-to-java-converter创建了类。您可以在Class_Name中提供您选择的类名。
public class Class_Name {
private String createdBy;
private float dashboardId;
ArrayList < Object > childOne_OfParent = new ArrayList < Object > ();
// Getter Methods
public String getCreatedBy() {
return createdBy;
}
public float getDashboardId() {
return dashboardId;
}
// Setter Methods
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public void setDashboardId(float dashboardId) {
this.dashboardId = dashboardId;
}
}
然后,您可以使用Jackson将json转换为Java对象并访问所需的数据。这里jsonString是您的json,而objResp是您的对象。
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Class_Name objResp = mapper.readerFor(Class_Name.class).readValue(jsonString);
这是一个有用的指南。 https://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/
答案 1 :(得分:0)
用于这类任务的工具是JsonPath。它具有类似xpath的搜索功能。 这是给定问题的可行示例
public static void main(String[] args) {
String searchQueryIds = "$.childOne_OfParent[*].child_OF_childOne[*].userQueryId";
try (InputStream is = Files.newInputStream(Paths.get("c:/temp/test.json"))) {
List<String> ids = JsonPath.parse(is).read(searchQueryIds);
System.out.println(ids);
} catch (Exception e) {
e.printStackTrace();
}
}
答案 2 :(得分:0)
假设存在用于json和jackson库的pojo。它将返回逗号分隔的queryUserIds。
Parent parent = new ObjectMapper().reader(Parent.class).readValue(inputJson);
String userIds = parent.getChildOne_OfParent().get(0).getChild_OF_childOne().stream()
.map(c -> c.getuserQueryId())
.collect(Collectors.joining(","));