我想从json提取值

时间:2019-05-22 09:45:29

标签: java json

我想从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"
        }
      ]
    }
  ]
} 

3 个答案:

答案 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(","));