2015-06-27 2 views
0

Я пытаюсь создать простой клиент Джерси для обработки данных из публичного API.Джерси клиент обрабатывать данные JSON

Используя приведенную ниже программу, я могу читать и обрабатывать данные, но я хочу преобразовать ответ 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); 

    } 


} 
+0

Можете ли вы привести пример тела ответа JSON? – tom

+0

Вы можете попробовать получить доступ к ссылке напрямую - https://data.montgomerycountymd.gov/api/views/54rh-89p8/rows.json?accessType=DOWNLOAD – user1050619

+0

Вам нужно будет создать объект Java для представления данных и сделать конечно, у него есть аннотация XmlRootElement. Также см. [Этот ответ] (http://stackoverflow.com/questions/9627170/cannot-unmarshal-a-json-array-of-objects-using-jersey-client) для получения дополнительной информации о регистрации поставщика Jackson. – tom

ответ

2

Попробуйте что-нибудь подобное (используя разбор 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(); 
    } 
0

Пожалуйста, используйте приведенный ниже код для отправки данных на URL-адрес отдыха и возврата желаемого объекта. (Ожидайте JSON FORMAT, если не измените метод mediatype для XML)

//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); 
Смежные вопросы