【问题标题】:Jersey client to process JSON dataJersey 客户端处理 JSON 数据
【发布时间】:2015-09-14 12:27:59
【问题描述】:

我正在尝试创建一个简单的 Jersey 客户端来处理来自公共 API 的数据。

使用下面的程序,我能够读取和处理数据,但我想将 JSON 响应转换为 Java 对象,以便我有一个结构。

如何根据响应构建 Java 对象结构。

public class RestServiceClient {

    public static void main(String[] args) {
        Client client = Client.create();
        WebResource webResource2 = client.resource("https://data.montgomerycountymd.gov/api/views/54rh-89p8/rows.json?accessType=DOWNLOAD");
        ClientResponse response2 = webResource2.accept("application/json").get(ClientResponse.class);
        if (response2.getStatus() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + response2.getStatus());
        }

        String output2 = response2.getEntity(String.class);
        System.out.println(output2);

    }


}

【问题讨论】:

  • 您能否提供 JSON 响应正文的示例?
  • 您可以尝试直接访问链接-data.montgomerycountymd.gov/api/views/54rh-89p8/…
  • 您必须创建一个 Java 对象来表示数据,并确保它具有 XmlRootElement 注释。另请参阅this answer,了解有关注册 Jackson 提供程序的更多信息。
  • 有没有办法从 JSON 对象中单独提取“数据”部分。

标签: java json jersey


【解决方案1】:

尝试这样的事情(使用 Google Gson 解析)。它并没有完全 100% 解析它,但它是一个开始。

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

    Client client = Client.create();
    WebResource webResource2 = client.resource("https://data.montgomerycountymd.gov/api/views/54rh-89p8/rows.json?accessType=DOWNLOAD");
    ClientResponse response2 = webResource2.accept("application/json").get(ClientResponse.class);
    if (response2.getStatus() != 200) {
        throw new RuntimeException("Failed : HTTP error code : " + response2.getStatus());
    }

    String output2 = response2.getEntity(String.class);
    JsonParser parser = new JsonParser();
    JsonElement parsed = parser.parse(output2);
    JsonObject asJsonObject = parsed.getAsJsonObject();
    JsonArray data = asJsonObject.getAsJsonArray("data");
    for(int i=0; i<data.size(); i++) {
        JsonElement jsonElement = data.get(i);
        JsonArray subdata = jsonElement.getAsJsonArray();
        for(int j=0; j<subdata.size(); j++) {
            JsonElement subelement = subdata.get(j);
            if(subelement.isJsonNull()) {
                break;
            }
            System.out.print(subelement.getAsString() + ",");
        }
        System.out.println();
    }

【讨论】:

    【解决方案2】:

    请使用以下代码将数据发送到休息 URL 并取回所需的对象。 (如果不将 mediatype 属性更改为 XML,则期望 JSON FORMAT)

       //packages for your reference
       import com.sun.jersey.api.client.Client;
       import com.sun.jersey.api.client.WebResource;
       import com.sun.jersey.api.client.config.ClientConfig;
       import com.sun.jersey.api.client.config.DefaultClientConfig;
       import com.sun.jersey.multipart.impl.MultiPartWriter;
    
       //Java Code
        ClientConfig cc = new DefaultClientConfig();
        cc.getClasses().add(MultiPartWriter.class);
        final Client client = Client.create(cc);
    
        WebResource resource = client.resource("https://your_url");
    
        //class that we the rest end point expecting
        CustomInputClass input = new CustomInputClass();
        // set data to input
    
        CustomOutputClass output = resource
                    .accept(MediaType.APPLICATION_JSON)
                    .type(MediaType.APPLICATION_JSON)
                    .post(CustomOutputClass.class,input);
    

    【讨论】:

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