【问题标题】:How to query a json object in java?如何在java中查询一个json对象?
【发布时间】:2017-02-27 12:12:13
【问题描述】:

我有一个带有数据的test.json 文件:

{
  "name":"tet",
  "id":"1",
  "age" : "34"
}

现在当我查询 select * from test; 时,结果应该显示为

name id age
-----------
tet  1   34

是否可以像查询 XML 一样直接查询 JSON 对象?

【问题讨论】:

  • 您使用的是什么 JSON 库?是 JSR-353 还是别的什么?
  • 我认为您可以根据查询实现自己的查询构建器,您可以从 JSON 对象中获取记录,您可以参考 Hibernate Query 实现。

标签: java json


【解决方案1】:

流行的 Jackson XML 库从 2.3 版开始支持 JsonPointer。这是一种类似于 XPath 的查询语言

输入

[{
  "name":"tet",
  "id":"1",
  "age" : "34"
},{
  "name":"tet",
  "id":"1",
  "age" : "34"
},{
  "name":"tet",
  "id":"1",
  "age" : "34"
},{
  "name":"tet",
  "id":"1",
  "age" : "34"
}]

例子

ObjectMapper objectMapper = new ObjectMapper();
JsonNode root = objectMapper.readTree(new File("foo.json"));
System.out.println(root.at("/0/name").asText());

【讨论】:

    【解决方案2】:

    我想说你可以尝试寻找一个库,它允许你搜索 JSON 数据,或者将你的 json 转换为 JSONObjects 并以面向对象的方式查询你的数据。

    也许这个帖子会有所帮助:

    Query a JSONObject in java

    【讨论】:

      【解决方案3】:

      没有办法直接从 Json 查询,如果你想创建一个新的类来满足你的要求,或者你可以使用来自 jackson-all- 的 ObjectMapper(下载并添加到你的类路径) 1.9.0.jar,并创建一个新的传输对象 TestTO.java 公开 setter 和 getter,您将获得如下数据..

      1.创建TestTO.java

      public class TestTO{
      
      private String name;
      private int id;
      private int age;
      
      public String getName() {
          return name;
      }
      public void setName(String name) {
          this.name = name;
      }
      public int getId() {
          return id;
      }
      public void setId(int id) {
          this.id = id;
      }
      public int getAge() {
          return age;
      }
      public void setAge(int age) {
          this.age = age;
      }
      

      }

      2.从对象中读取数据。

                  final ObjectMapper mapper = new ObjectMapper();
                  Test test = mapper.readValue(yourJson.json, TestTO.class);
                  String name = test.getName();
                  int id = test.getId();
                  int age = test.getAge();
      

      如果您的 json 包含多个测试对象,请使用如下所示的测试数组,它将为您提供测试数组,您可以遍历并获取数据,如下所示。

                  final ObjectMapper mapper = new ObjectMapper();
                  TestTO[] test = mapper.readValue(yourJson.json, TestTO.class[]);
                  for(Test tst:test){
                  String name = test.getName();
                  int id = test.getId();
                  int age = test.getAge();
                 }
      

      【讨论】:

        猜你喜欢
        • 2013-10-17
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-21
        相关资源
        最近更新 更多