4

以下をPOJOJacksonに逆シリアル化するために使用しています:JSON

{
    "etag": "\"SomeETag\"",
    "jobComplete": true,
    "jobReference": {
        "jobId": "someJobId",
        "projectId": "someProjectId"
    },
    "rows": [
        {
            "f": [
                {
                    "v": "101"
                },
                {
                    "v": "FirstService"
                },
                {
                    "v": "firstAPI"
                }
            ]
        },
        {
            "f": [
                {
                    "v": "102"
                },
                {
                    "v": "SecondService"
                },
                {
                    "v": "SecondAPI"
                }
            ]
        }
    ],
    "totalRows": "2"
}

私が使用しているPOJOは次のとおりです。

    @JsonAutoDetect
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class Response {

        public String etag;
        public boolean jobComplete;
        public List<FWrapper> rows = new ArrayList<FWrapper>();
    }

    class FWrapper {
        public F f; 
    }

    class F {
        public List<VWrapper> vWrappers = new ArrayList<VWrapper>();       
    }

    class VWrapper {
        public String v;
    }

このコードを使用してマッピングを行います。

    ObjectMapper mapper = new ObjectMapper();
    Response response = mapper.readValue(response, Response.class);

そして、ここに私が得ているエラーがあります:

org.codehaus.jackson.map.JsonMappingException: [ソース: java.io.StringReader@11563ff; で START_ARRAY トークンから mypackage.F のインスタンスをデシリアライズできません。行: 1、列: 227] (参照チェーン経由: mypackage.Response["rows"]->mypackage.FWrapper["f"])

同様のエラーでいくつかの古い質問を確認しましたが、まだ解決できませんでした。これ は私のものと非常によく似ているように見えYour data is problematic in that you have inner wrapper objects in your arrayますが、これは私のデータにも当てはまると思います。しかし、まだ正しい POJO マッピングを行うことができませんでした。任意のポインタをいただければ幸いです。

編集:タイプミスを修正しました(Json私が使用しているのは有効です)

4

2 に答える 2

5

クラス モデルが JSON と一致しません。

JSON では、 f はオブジェクトではなく配列です。クラス F には、もののリストを含むオブジェクトがあります。

このようなマッピングは機能するはずです (未テスト)

public class Response {

    public String etag;
    public boolean jobComplete;
    public List<F> rows;
}


public class F {
    public List<V> f;
}

public Class V {
    public String v;
}
于 2013-01-24T21:58:08.393 に答える
0

「行」配列には、閉じ角括弧]がありません。

JSON が無効になります。

エラー メッセージを注意深く読みます。

org.codehaus.jackson.map.JsonMappingException: [Source: java.io.StringReader@11563ff;]で START_ARRAY トークンから mypackage.F のインスタンスを逆シリアル化できません。行: 1、列: 227] (参照チェーン経由: mypackage.Response[ "rows" ]->mypackage.FWrapper["f"])


JSON を変更して追加したことがわかります。

あなたはまだ同じ問題を抱えていますか?

于 2013-01-24T21:50:16.057 に答える