0

このクラスに基づいてJacksonでJSONを作成しました:

    public class One {
    public long param;

    public List<Two> two;

    public static class Two{
        public long param;
        public List<Short> param2;
    }
}

クラスごとに 2 つのコンストラクターを定義し、後で json ファイルに書き込まれるオブジェクトの作成に使用します。結果は (有効な JSON) です。

[{"param":1,"Two":[{"param":4,"param2":[1,2,3]},{"param":5,"parma2":[4,5,6]}]},{"param":2,"Two":[{"param":6,"param2":[1,2,3]}]}]

ここで、パラメーターを読み取ってロードしたいと思います。次のように定義します。

    mapper.configure(Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); //tried with and without
    JsonFactory f = new JsonFactory();
    JsonParser jp;
jp = f.createJsonParser(FILE);
    jp.nextToken();
    while (jp.nextToken() == JsonToken.START_OBJECT) {
         mapper.readValue(jp, One.class);
     }
     jp.close();

このエラーがあります:

Can not deserialize instance of json.One$Two out of START_ARRAY
4

1 に答える 1

1

私は解決策を見つけました。

json ファイルのロード:

List<One> myObjects = new ArrayList<One>();
myObjects = mapper.readValue(FILE, mapper.getTypeFactory().constructCollectionType(List.class, One.class));

クラスのコードは、以下のみを追加して編集され@JsonProperty("Two")ます。

   public class One {
    public long param;
    @JsonProperty("Two")
    public List<Two> two;

    public static class Two{
        public long param;
        public List<Short> param2;
    }
}
于 2013-08-28T11:41:49.490 に答える