如何将JSONArray转换为多维数组列表?

klsxnrf1  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(153)

我的代码:

try {
    JSONArray array = new JSONArray(response.body());
    List<JSONArray> arr = new ArrayList<>();
    for (int i = 0; i < array.length(); i++) {
        arr.add(array.getJSONArray(i));
    }
    Log.d("arr",arr.toString());
}catch (JSONException e) {
    throw new RuntimeException(e);
}

这是我的arr

[["bdbd","hdhs","hdhd","1234567890","[[shhs, sbbs, married], [sjsn, snsn, unmarried]]"]]

我想转换arr中的最后一个元素
“[[shhs,sbbs,已婚],[sjsn,snsn,未婚]]”
到多维ArrayList(ArrayList<ArrayList<String>>)。我该怎么做?

kkih6yb8

kkih6yb81#

在没有找到其他解决方案后,我只是迭代了整个字符串,并将每个元素附加到数组列表中,如下所示:

String temp = arr.get(0).get(4).toString();
String details = "";
ArrayList<String> temp1 = new ArrayList<>();
ArrayList<ArrayList<String>> final = new ArrayList<>();
for(int i=2; i<temp.length()-1; i++){
    if(temp.charAt(i) != ',' && temp.charAt(i) != ' ' && temp.charAt(i) != '['){
        if(temp.charAt(i) != ']')
            details += temp.charAt(i);
        else{
            temp1.add(details);
            final.add(temp1);
            temp1 = new ArrayList<>();
            details = "";
        }
    }
    else{
        if(!details.equals("")) {
            temp1.add(details);
        }
        details = "";
    }
}
1bqhqjot

1bqhqjot2#

有一个单一的解决方案。不要使用json.org库,使用JacksonJson库。在这种情况下,你要做的就是

ObjectMapper om = new ObjectMapper();
List<Object> myList = om.readValue(response.body(), List.class);

此外,还有一个JsonUtil类,它是ObjectMapper上的一个瘦 Package 器,允许您在不示例化ObjectMapper的情况下执行相同的操作:

List<Object> myList = JsonUtils.readObjectFromJsonString(response.body(), List.class);

JsonUtils附带由我编写和维护的MgntUtils开源库。您可以将其作为Maven artifactGithub(包括javadoc和源代码)。这里是Javadoc for JsonUtils class

相关问题