Java JSONObject vs JARRAY获取数组长度
我有一个JSONObject,我将它传递给一个方法,以便处理成Java JSONObject vs JARRAY获取数组长度,java,android,json,Java,Android,Json,我有一个JSONObject,我将它传递给一个方法,以便处理成ArrayList { "set0" : { "title" : "Do you win?", "answer" : "1", "imgUrl" : "imag", "id" : "1" }, "set1" : { "title" : "Did you loose?", "answer" : "1",
ArrayList
{
"set0" :
{
"title" : "Do you win?",
"answer" : "1",
"imgUrl" : "imag",
"id" : "1"
},
"set1" :
{
"title" : "Did you loose?",
"answer" : "1",
"imgUrl" : "imag",
"id" : "2"
}
}
该方法的结构如下所示:
questions(JSONObject result){
// initialization
for(int i=0;i < result.length();i++){
question_list.add(result.getJSONObject("set"+i).getString("title"));
answer_list.add(result.getJSONObject("set"+i).getString("answer"));
img_list.add(result.getJSONObject("set"+i).getString("imgUrl"));
question_batch.add(result.getJSONObject("set"+i).getInt("id"));
}
// rest of code
}
问题(JSONObject结果){
//初始化
for(int i=0;i
当我的jsonobject变得更大,但与上面发布的结构相同时,我通常会看到jsonarray用于循环条件,而不是jsonobject本身开始产生错误的结果,对于想要迭代jsonobject的人来说,这是一个不正确的实现吗?您可能也想看看Jackson。这也非常简单,您的代码可能会从使用它中受益。我不确定您的实现是否“不正确”,但我通常是这样迭代JSON的
int i = 0;
boolean continue = true;
while (continue){
if (result.has("set" + i){
JSONObject set = result.get("set" + i.toString());
if (set.has("title"){
question_list.add(set.getString("title");
}
if (set.has("answer"){
answer_list.add(set.getString("answer");
}
if (set.has("imgUrl"){
image_list.add(set.getString("imgUrl");
}
if (set.has("id"){
question_batch.add(set.getInt("id");
}
i++;
}else{
continue = false;
}
}
这会更有效率,因为您不必每次都要创建一个新的JSON对象来提取数据。
我还将创建一个新类来处理JSON对象,并创建该类型的数组列表,因此每次迭代只需添加一个对象。这样,您可以确保您的问题/答案/图像URL/id都保存在一起。像这样:
JSONObject set = result.get("set" + i.toString());
QuestionObject newQuestion = new QuestionObject();
if (set.has("title"){
newQuestion.setTitle(result.getString("title");
}
if (set.has("answer"){
newQuestion.setAnswer(result.getString("answer");
}
if (set.has("imgUrl"){
newQuestion.setImageURL(result.getString("imgUrl");
}
if (set.has("id"){
newQuestion.setID(result.getInt("id");
}
questionList.add(newQuestion);
另外,如果您没有注意到,您可以直接使用
json.getInt()
为“id”字段解析整数,而不是字符串。看起来您的数据应该存储为JSONArray,而不是JSONObject,因为它表示相同类型的多个数据对象的列表,因此,您建议将JSONArray而不是对象传递给该方法?尝试使用GSON而不是自己的解析。是的,我在解析Int的实际代码中使用了它,这只是我在这里犯的一个错误,谢谢你指出了这一点