2017-10-26 14 views
0

JSON StringをPOJOクラスに解析したいがエラーが発生する。ObjectMapperを使用してPOJOからJSON値を読み取る際の問題

そして たちはJavaでメソッドから2つの値を返すことができ

Stringデータ

String PostcreatedMessage = "..."; // see JSON value below 
{ 
    "home_page":"/desk", 
    "message":"Logged In", 
    "full_name":"Shoaib Shaikh" 
} 

Main.class

LoginR loginR=new LoginR(); 

ObjectMapper mapper=new ObjectMapper(); 

loginR=mapper.readValue(PostcreatedMessage,LoginR.class); 
System.out.println(loginR.getHomePage()); 
System.out.println(loginR.getMessage()); 
System.out.println(loginR.getFullName()); 

parsejacker.class

public class parsejacker 
{ 

    LoginR loginR=null; 
    String jsonurl; 

    public parsejacker(String jsonurl) { 
     super(); 
     this.jsonurl = jsonurl; 
    } 

     public void ParseLogin() throws JsonParseException,JsonMappingException,IOException 
     { 
       System.out.println(jsonurl+"this parselogin"); 
       ObjectMapper mapper=new ObjectMapper(); 
       loginR=mapper.readValue(jsonurl,LoginR.class); 
       System.out.println(loginR.getHomePage()); 
       System.out.println(loginR.getMessage()); 
       System.out.println(loginR.getFullName()); 

     } 
} 

LoginR.class

public class LoginR 

    { 
     private String homePage; 
     private String message; 
     private String fullName; 

      public String getHomePage(){ 
      return homePage; 
      } 
      public void setHomePage(String input){ 
      this.homePage = input; 
      } 
      public String getMessage(){ 
      return message; 
      } 
      public void setMessage(String input){ 
      this.message = input; 
      } 
      public String getFullName(){ 
      return fullName; 
      } 
      public void setFullName(String input){ 
      this.fullName = input; 
     } 
} 

私は、これらのエラーを取得しています。

(私はエラーがPostcreatedMessage文字列であると思い "home_page":"/desk"を克服するためにどのように - 。?>この文字を区切るか、無視する、すなわち、このバックスラッシュ・エラー)

Exception in thread "main" org.codehaus.jackson.map.exc.UnrecognizedPropertyException: 

    Unrecognized field "home_page" (Class org.greenshoaib.greenshaikh.login.model.LoginR), not marked as ignorable 

at [Source: [email protected]; line: 1, column: 15] 

    (through reference chain: org.greenshoaib.greenshaikh.login.model.LoginR["home_page"]) 

    at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53) 
    at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267) 
    at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673) 
    at org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:659) 
    at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1365) 
    at org.codehaus.jackson.map.deser.BeanDeserializer._handleUnknown(BeanDeserializer.java:725) 
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:703) 
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580) 
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732) 
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863) 
    at org.greenshoaib.greenshaikh.rest.client.RestAPIClient.main(RestAPIClient.java:72  ) 
+1

はここで、最小限の例ですスタイル、例えばあなたの変数の命名。 'PostcreatedMessage'はクラス名のように見えますが、おそらく変数名です。そのためJavaコード規約では大文字で始まるクラス名だけをラクダ文字で書くべきだと述べています。 – Thomas

答えて

0

問題は、あなたのJSONフィールド「home_page」が含まれていることですが、あなたのPOJOではhomePage(「FULL_NAME」も同じ)と呼ばれています。ジャクソンは二人が平等であることを知らないので、あなたはそれを助ける必要があります。すなわち、このように、homePage@JsonProperty("home_page")を追加することによって(とfullNameのために同じことを行うことを忘れないでください):ここ

@JsonProperty("home_page") 
private String homePage; 
0

は、以下のJSON文字列を使用しての方法を試してみてください:

PostcreatedMessage { 
    "homePage":"/desk", 
    "message":"Logged In", 
    "fullName":"Shoaib Shaikh" 
} 
+0

これはうまくいくが、通常、開発者はペイロードを自由に変更することができない。POJOモデルを飾る注釈付きの他の回答を参照してください。ペイロードをそのままにして、モデル内の適切なJava変数命名法を使用することができます。 – Mena

+0

私は知っていますが、それは問題がここから来るかどうかを確認することでした。あなたが言ったように、本当の解決策は '@ JsonProperty'アノテーションを追加することです。 – senerh

0

あなたの問題はObjectMapperは、例えば、名前であなたのLoginRクラスのプロパティを認識することができないということですhomePage != home_page

これらのプロパティに注釈を付けて、予想されるJSONキーと一致させることができます。あなたのコーディングで動作するはずサイドノートで

public class LoginR { 
    @JsonProperty(value="home_page") 
    private String homePage; 
    @JsonProperty(value="full_name") 
    private String fullName; 
    // etc. the rest of your POJO 
} 

...どこか...

String json = "{\"home_page\":\"/desk\",\"message\":\"Logged In\",\"full_name\":\"Shoaib Shaikh\"}"; 
ObjectMapper mapper=new ObjectMapper(); 
LoginR loginR = mapper.readValue(json,LoginR.class); 
System.out.println(loginR.getHomePage()); 
System.out.println(loginR.getMessage()); 
System.out.println(loginR.getFullName()); 

出力

/desk 
Logged In 
Shoaib Shaikh 
+0

あなたはこれに答えることができますhttps://stackoverflow.com/questions/46939994/how-to-read-csv-file-in-java-using-jackson-library-json –

+0

@shoaibshaikh完了、見てください。 – Mena

関連する問題