4

问题

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

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

背景——到目前为止我所拥有的

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

<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?

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

4

1 回答 1

4

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

以下代码段使用 Google HTTP 客户端库和 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());
}
于 2013-09-18T01:30:38.900 回答