2017-01-23 4 views
1

У меня возникли проблемы чтения этого JSON, код, кажется, работает, но есть 2 проблемыЧтение JSON с помощью Джексоном

  1. Он читает только один блок в JSON, не полностью.
  2. Он всегда имеет значение «null» в качестве значения в свойствах.

Я пытался показать json, организованный в консоли, но когда я попробую, эти две вещи случаются.

Образец данных JSON:

{ 
    "RestResponse" : { 
    "messages" : [ "More webservices are available at http://www.groupkt.com/post/f2129b88/services.htm", "Total [249] records found." ], 
    "result" : [ { 
     "name" : "Afghanistan", 
     "alpha2_code" : "AF", 
     "alpha3_code" : "AFG" 
    }, { 
     "name" : "Åland Islands", 
     "alpha2_code" : "AX", 
     "alpha3_code" : "ALA" 
    }, { 
     "name" : "Albania", 
     "alpha2_code" : "AL", 
     "alpha3_code" : "ALB" 
    }, ... 
    ] 
    } 
} 

Мой код:

public class jsonController { 

public void run() { 
    ObjectMapper mapper = new ObjectMapper(); 
    try { 

     jsonHandler obj = mapper.readValue(new URL("http://services.groupkt.com/country/get/all"), jsonHandler.class); 
     //Organized Print 
     String organizedprint = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); 
     System.out.println(organizedprint); 


    } catch (JsonGenerationException e) { 
     e.printStackTrace(); 
    } catch (JsonMappingException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

И в основном я получил

jsonController obj = new jsonController(); 
    obj.run(); 

И вот jsonHandler

@JsonIgnoreProperties(ignoreUnknown=true) 
public class jsonHandler { 
    private String restResponse; 
    private String messages; 
    private String result; 
    private String name; 
    private String alpha2; 
    private String alpha3; 
} 

Любая идея, что я делаю неправильно?

+0

Что такое jsonHandler? Это ваш картографический класс? Можете ли вы опубликовать его? –

+0

@fabienbk там, у него есть геттеры и сеттеры, я не ставил их здесь, чтобы сделать его короче. – JuanPa

+0

Спасибо. См. Мой ответ ниже. –

ответ

1

Вы неправильно указали свои типы данных в своей модели. Ваш Java-код объявляет, что данные будут иметь один объект, содержащий 6 строковых атрибутов. Данные JSON, предоставленные сервером, совсем не похожи. Например, messages - это список строк, а result - это список объектов, а не строка. Вам нужно объявить свою модель Java соответствующим образом.

Например:

public class jsonHandler 
    { 
    private RestResponseStructure restResponse; 
    } 

public class RestResponseStructure 
    { 
    private List<String> messages; 
    private List<CountryRecord> results; 
    } 

public class CountryRecord { 
    private String name; 
    private String alpha2_code; 
    private String alpha3_code; 
} 
0

Хорошо ваш класс картирование, jsonHandler неправильно. Прежде всего, он должен быть капитализирован правильно (JsonHandler)

Использование http://www.jsonschema2pojo.org/ Я создал лучшую модель. Он состоит из 3-х классов. Просто измените пакет «com.example» на ваш.

package com.example; 

import java.util.HashMap; 
import java.util.Map; 
import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"RestResponse" 
}) 
public class JsonHandler { 

@JsonProperty("RestResponse") 
private RestResponse restResponse; 
@JsonIgnore 
private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

@JsonProperty("RestResponse") 
public RestResponse getRestResponse() { 
return restResponse; 
} 

@JsonProperty("RestResponse") 
public void setRestResponse(RestResponse restResponse) { 
this.restResponse = restResponse; 
} 

@JsonAnyGetter 
public Map<String, Object> getAdditionalProperties() { 
return this.additionalProperties; 
} 

@JsonAnySetter 
public void setAdditionalProperty(String name, Object value) { 
this.additionalProperties.put(name, value); 
} 

} 

com.example.RestResponse.java

package com.example; 

import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"messages", 
"result" 
}) 
public class RestResponse { 

@JsonProperty("messages") 
private List<String> messages = null; 
@JsonProperty("result") 
private List<Result> result = null; 
@JsonIgnore 
private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

@JsonProperty("messages") 
public List<String> getMessages() { 
return messages; 
} 

@JsonProperty("messages") 
public void setMessages(List<String> messages) { 
this.messages = messages; 
} 

@JsonProperty("result") 
public List<Result> getResult() { 
return result; 
} 

@JsonProperty("result") 
public void setResult(List<Result> result) { 
this.result = result; 
} 

@JsonAnyGetter 
public Map<String, Object> getAdditionalProperties() { 
return this.additionalProperties; 
} 

@JsonAnySetter 
public void setAdditionalProperty(String name, Object value) { 
this.additionalProperties.put(name, value); 
} 

} 

com.example.Result.java

package com.example; 

import java.util.HashMap; 
import java.util.Map; 
import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
"name", 
"alpha2_code", 
"alpha3_code" 
}) 
public class Result { 

@JsonProperty("name") 
private String name; 
@JsonProperty("alpha2_code") 
private String alpha2Code; 
@JsonProperty("alpha3_code") 
private String alpha3Code; 
@JsonIgnore 
private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

@JsonProperty("name") 
public String getName() { 
return name; 
} 

@JsonProperty("name") 
public void setName(String name) { 
this.name = name; 
} 

@JsonProperty("alpha2_code") 
public String getAlpha2Code() { 
return alpha2Code; 
} 

@JsonProperty("alpha2_code") 
public void setAlpha2Code(String alpha2Code) { 
this.alpha2Code = alpha2Code; 
} 

@JsonProperty("alpha3_code") 
public String getAlpha3Code() { 
return alpha3Code; 
} 

@JsonProperty("alpha3_code") 
public void setAlpha3Code(String alpha3Code) { 
this.alpha3Code = alpha3Code; 
} 

@JsonAnyGetter 
public Map<String, Object> getAdditionalProperties() { 
return this.additionalProperties; 
} 

@JsonAnySetter 
public void setAdditionalProperty(String name, Object value) { 
this.additionalProperties.put(name, value); 
} 

} 
+0

Полезно, но слишком много информации, я думаю. Спасибо в любом случае за ответ. – JuanPa

Смежные вопросы