6

JSON 文字列を受信する REST サービスを使用して構築している Web アプリケーションに関して質問があります。

Json 文字列は次のようなものです。

{
    "string" : "value",
    "string" : "value", 
    "object" : {
                 "string" : "value",
                 "string" : "value",
                 ....
                }
}

私は resteasy を使用して、下で jackson を使用する json 文字列を解析しています。jaxb アノテーション付きクラスがあり、「オブジェクト」を完全に文字列変数に解析したいと考えています。これを行う理由は、後で正しいパーサーを使用して json を解析できるようにするためです (リクエストを送信するアプリケーションに依存するため、事前に知ることはできません)。

私の jaxb 注釈付きクラスは次のようになります。

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{

@XmlElement(type = String.class)
private String object;

//getter and setter
...
}

残りの呼び出しを実行し、ジャクソンにこのコードを解析させると、

Can not deserialize instance of java.lang.String out of START_OBJECT token

エラー。実際には、jsonオブジェクトであるjson文字列の一部を文字列に解析しようとしています。同様の問題を抱えている人を見つけることができないようです。

ご回答ありがとうございます。

4

4 に答える 4

1

@KwintenP json smart libraryを使ってみてください。

次に、次を使用して最初に JSON オブジェクトを簡単に取得できます。

JSONObject test = (JSONObject) JSONValue.parse(yourJSONObject);
String TestString = test.toString();

さらに、JSON オブジェクト内の特定のオブジェクトを取得して、それが別のオブジェクトや配列である可能性があり、それを文字列に変換したり、必要な方法で操作したりできます。

于 2013-05-31T16:02:49.980 に答える
0

このようなこともできます;

public class LeaderboardView
{
     @NotEmpty
     @JsonProperty
     private String appId;

     @NotEmpty
     @JsonProperty
     private String userId;

     @JsonProperty
     private String name = "";

     @JsonProperty
     private String imagePath = "";

     @NotEmpty
     @JsonIgnore
     private String rank = "";

     @NotEmpty
     @JsonProperty
     private String score;

     public LeaderboardView()
     {
        // Jackson deserialization
     }

}

于 2013-05-31T14:47:02.277 に答える
0
java.lang.String out of START_OBJECT token

これは、後に期待される文字"object"が引用符"であることを意味しますが、括弧ではありません{

期待されるjson

"object" : "my object"

実際のjson

"object" : { ...  

=======
例のように json を解析したい場合は、クラスを変更してください。例えば

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Test{

   @XmlElement
   private InnerTest object;

   //getter and setter
...
}  

@XmlAccessorType(XmlAccessType.PROPERTY)
public class InnerTest{

   @XmlElement
   private String string;

   //getter and setter
...
}
于 2013-03-25T09:40:29.377 に答える