簡體   English   中英

在Android中使用Jackson的JSONList解析問題

[英]JSONList parsing issue using Jackson in Android

我正在嘗試使用Jackson解析器解析JSONList。 如果列表包含多個元素,則分析工作正常。

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

如果只有一個元素,那么我們將得到一個僅包含一個json對象的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

class studentList應該包含該對象而不是arrayList

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

我希望它能解決您的問題

最后,我找到了解決方案。 我為對象映射器添加了以下功能。

objectMapper.configure(Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY,true);

使用Jackson ACCEPT_SINGLE_VALUE_AS_ARRAY從字符串反序列化ArrayList

這幫助我解決了這個問題。

感謝Mohsin Naeem&Faizan先生的快速回復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM