如何在Java中迭代JSONArray

3

我想从JSONArray中提取值。JSONArray有N个行和列。

        ObjectMapper mapper = new ObjectMapper();
        DynamicForm dynamicForm = new DynamicForm();
        dynamicForm = dynamicForm.bindFromRequest();
        Dynamic dynamic = dynamicForm.get(); 
        //List<OneModel> list = new ArrayList<OneModel>();
        //List iterate=new ArrayList();

        String data = dynamic.getData().get("content").toString();
        try {
            JSONArray jsonArray = new JSONArray(data);
            for (int i = 0; i < jsonArray.length(); i++) {
                System.out.println(jsonArray.get(i));
        } }catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   

以下是其结果。
["1001432","05-KALENJI-P1229","KALENJI","2","2014-11-09 09:37:14.379482",""],
["1001432","05-KALENJI-P1228","KALENJI","1","2014-11-09 09:37:14.379482",""],
["1001432","05-KALENJI-P1227","KALENJI","5","2014-11-09 09:37:14.379482",""]

我想逐个提取值并将其赋给变量。例如1001432、05-KALENJI-P1229、KALENJI、2、2014-11-09 09:37:14.379482。这样我就可以处理每个值。请有人帮助我完成同样的操作。


1
请发布您想要检索的Json。 - Anik Islam Abhi
[["1001556","5-KIPSTA","KIPSTA","1","2014-11-09 15:12:44.713654"]] - Kathirvel Appusamy
@KathirvelAppusamy 这不是有效的 JSON。请发布 content 键的完整值,即 dynamic.getData().get("content").toString() 的值。 - jmn
以下是我从dynamic.getData().get("content").toString()获取到的数组[["1001556","5-KIPSTA-P414","KIPSTA","1","2014-11-09 15:12:44.713654"],["1001556","5-KIPSTA-P412","KIPSTA","1","2014-11-09 15:12:44.713654"]]。 - Kathirvel Appusamy
请问您能告诉我如何解析它吗? - Kathirvel Appusamy
3个回答

9
您可以使用以下代码:

//将您的JSON放入字符串变量"data"中

JSONArray jsonArray=new JSONArray(data);
            if(jsonArray!=null && jsonArray.length()>0){
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONArray childJsonArray=jsonArray.optJSONArray(i);
                    if(childJsonArray!=null && childJsonArray.length()>0){
                        for (int j = 0; j < childJsonArray.length(); j++) {
                            System.out.println(childJsonArray.optString(j));
                        }
                    }
                }
            }

这是我的完整的JsonArray [["1001556","5-KIPSTA-P414","KIPSTA","1","2014-11-09 15:12:44.713654"],["1001556","5-KIPSTA-P412","KIPSTA","1","2014-11-09 15:12:44.713654"]]。请帮我。 - Kathirvel Appusamy
@KathirvelAppusamy 请检查代码,它可以正常工作,请接受答案。 - Krunal Indrodiya
@KathirvelAppusamy请接受这个答案,这将有助于其他人。 - Krunal Indrodiya
@KathirvelAppusamy 谢谢。 - Krunal Indrodiya
2
@Krunal Indrodiya,我认为强迫对方接受你的答案并不是一个好行为。 - JacksOnF1re
显示剩余2条评论

1

看起来JSON数组是二维的。请尝试以下操作:

JSONArray outerArray = new JSONArray(data);
for (int i = 0; i < outerArray.length(); i++) {
    JSONArray innerArray = outerArray.getJSONArray(i);

    for (int j = 0; j < outerArray.length(); j++) {
        System.out.println(innerArray.get(j));
    }
}

0
你可以通过循环遍历数组并像这样获取你的对象:
 JsonObject home = array.getJsonObject(index); //use index to iterate
 String num = home.getString("number"); //make number a static final variable

“Number” 是一个值的名称,最初是通过输入方式放进去的。
.add("number", someString);

你好。

编辑: 我建议阅读文档:Oracle Docthis, too.


没有名为number的索引。我只能迭代诸如0、1、2、3等索引值。所以请给我一些其他的解决方案。这对我不起作用。 - Kathirvel Appusamy
如果您不知道字符串的标签,那么其他答案提供的optString方法也可以完成工作。 - JacksOnF1re

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接