2017-01-23 11 views
1

を使用してJSONを読むと、コードが動作しているようですが、2つの問題が、私はこのJSONを読んで問題を抱えていジャクソン

  1. それだけではない、完全に、JSONの1つのブロックを読み込みがあります。
  2. プロパティの値として常に「null」があります。

私はコンソールに組織されたjsonを表示しようとしていましたが、私はそれらを試してみると2つのことが起こります。 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つの文字列属性を含む1つのオブジェクトが存在することを宣言します。サーバーによって提供される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

関連する問題