1

Jackson パーサーを使用して JSONList を解析しようとしています。リストに複数の要素が含まれている場合、解析は正常に機能しています。

String json = "{\"students\":[{\"id\":\"1\",\"name\":\"A\"}, {\"id\":\"2\",\"name\":\"B\"}]}";

要素が 1 つしかない場合は、json オブジェクトを 1 つだけ含む json を取得します。

 String json = "{\"students\":{\"id\":\"1\",\"name\":\"A\"}}";

その時、次のエラーが表示されます

 12-10 15:49:01.527: W/System.err(18923): org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token

私は次のコードを使用しています:

 @JsonIgnoreProperties(ignoreUnknown = true)
public class Student {
    @JsonProperty("id")
    public String id;

    @JsonProperty("name")
    public String name;
}

    @JsonIgnoreProperties(ignoreUnknown = true)
public class StudentList {
    @JsonProperty("students")
    ArrayList<Student> students = new ArrayList<Student>();
}


    public class JacksonTest extends Activity {

    StudentList studentList;
    //String json = "{\"students\":[{\"id\":\"1\",\"name\":\"A\"}, {\"id\":\"2\",\"name\":\"B\"}]}";
    String json = "{\"students\":{\"id\":\"1\",\"name\":\"A\"}}";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jackson_test);


        ObjectMapper objectMapper = new ObjectMapper();
        JsonFactory jf = new JsonFactory();
        try {
            JsonParser jp = jf.createJsonParser(json);
            jp.setFeature(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS,true);
            studentList = objectMapper.readValue(jp, StudentList.class);

            System.out.println("Size :"+studentList.students.size());
        }
        catch (JsonParseException e) {
            e.printStackTrace();
        }
        catch (JsonMappingException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }   

}

この問題を解決するために私を助けてください。実際には、多数のリストを含む非常に大きなjsonを解析したいと考えています。

前もって感謝します、Sudheesh B

4

2 に答える 2

3

クラスstudentListには、arrayList の代わりにオブジェクトが含まれている必要があります

public class StudentList {
    @JsonProperty("students")
    public Student students;
}

問題が解決することを願っています

于 2012-12-10T08:00:02.120 に答える
2

最後に、これを解決するソリューションを手に入れました。オブジェクトマッパーに以下の機能を追加しました。

objectMapper.configure(Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

Jackson ACCEPT_SINGLE_VALUE_AS_ARRAY を使用して String から ArrayList をデシリアライズします

これは私がこれを解決するのを助けました。

M Mohsin Naeem & Faizan さん、素早い返信ありがとうございます。

于 2012-12-10T09:17:22.043 に答える