【问题标题】:Google’s Freebase API: Basic MQL Query and JSON Parse Example in Java?Google 的 Freebase API:Java 中的基本 MQL 查询和 JSON 解析示例?
【发布时间】:2013-09-16 11:29:36
【问题描述】:

问题

使用 MQL 从 Java Freebase API (google-api-services-freebase) 查询 Freebase 的基本示例是什么样的?处理结果数据的推荐方法是什么?

我特别想知道如何“正确”使用the com.google.api.services.freebase.Freebase class

背景——我目前所拥有的

我的项目中有这些依赖项:

<dependency>
  <groupId>com.google.apis</groupId>
  <artifactId>google-api-services-freebase</artifactId>
  <version>v1-rev42-1.17.0-rc</version>
</dependency>
<dependency>
  <groupId>com.google.http-client</groupId>
  <artifactId>google-http-client-jackson2</artifactId>
  <version>1.17.0-rc</version>
</dependency>

现在使用以下代码,我可以将未解析的 JSON 结果发送到标准输出:

Freebase freebase = new Freebase(
    GoogleNetHttpTransport.newTrustedTransport(),
    JacksonFactory.getDefaultInstance(),
    null);
Mqlread mqlread = freebase.mqlread(
    "[{ \"limit\": 5, \"name\": null, \"type\": \"/medicine/disease\" }]");
mqlread.executeAndDownloadTo(System.out);

但是解析返回的 JSON 的推荐方法是什么?如果我必须手动解析 JSON 结果流,我为什么还要使用 Freebase API?

注意:最终我想查询更多的数据;上面的查询只是一个简单的例子。

【问题讨论】:

    标签: java json freebase google-api-java-client mql


    【解决方案1】:

    您是对的,因为目前标准的 Google Java 客户端库并没有比仅自己调用 Freebase API 提供很多好处。这是因为 Freebase MQL API 可以返回任意复杂的 JSON 数据,这使得客户端库很难用它做任何花哨的事情。我喜欢 json-simple 库来解析结果。

    以下 sn-p 使用 Google HTTP client library 和 json-simple 发出 Freebase 查询并解析结果。

    HttpTransport httpTransport = new NetHttpTransport();
    HttpRequestFactory requestFactory = httpTransport.createRequestFactory();
    JSONParser parser = new JSONParser();
    String query = "[{\"limit\": 5,\"name\":null,\"type\":\"/medicine/disease\"}]";
    GenericUrl url = new GenericUrl("https://www.googleapis.com/freebase/v1/mqlread");
    url.put("key", "YOUR-API-KEY-GOES-HERE");
    url.put("query", query);
    HttpRequest request = requestFactory.buildGetRequest(url);
    HttpResponse httpResponse = request.execute();
    JSONObject response = (JSONObject)parser.parse(httpResponse.parseAsString());
    JSONArray results = (JSONArray)response.get("result");
    for (Object result : results) {
      System.out.println(result.get("name").toString());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多