如何从json数组中的数组获取

时间:2019-06-26 19:08:38

标签: android json

我正在尝试解析{"type_history":[["15","0.07","apple"],["13","0.03","banana"],["10","0.23","lemon"]]},我尝试在JsonArray中获取数组,但是失败。

String myJson="{"type_history":[["15","0.07","apple"],["13","0.03","banana"],["10","0.23","lemon"]]}";
ArrayList<UserType> rtn = new ArrayList<>();
JSONArray j=myJson.optJSONArray("type_history");
for (int i = 0; i < j.length(); i++) {
    UserType tmp = new UserType();
    JSONArray tmpArray = new JSONArray(Arrays.asList(j.get(i)));
    tmp.setType(tmpArray.getString(0));
    tmp.setValue(Float.parseFloat(tmpArray.getString(1)));
    rtn.add(tmp);
}

tmpArray.getString(0)中,我仍然得到["15","0.07","apple"],而不是"15" 如何修复我的代码以从该数组获取价值?

2 个答案:

答案 0 :(得分:1)

您有一个JSONArrays的JSONArray ....所以,假设您想获得15 ...您会做类似的事情...

JSONObject o2 = new JSONObject(myJson);
JSONArray arr = o2.getJSONArray("type_history");
System.out.println(arr.getJSONArray(0).get(0));

让我们说您想获取每个元素中的所有首个元素。您应该这样做...

for (int i = 0; i < arr.length(); i++) {
    System.out.println(arr.getJSONArray(i).get(0));
}

让我们继续挖掘。...

如果您要打印所有内容...

    for (int i = 0; i < arr.length(); i++) {
        for (int j = 0; j < arr.getJSONArray(i).length(); j++) {
            System.out.println(arr.getJSONArray(i).get(j));
        }
        System.out.println("----------");
    }

将打印:

15
0.07
apple
----------
13
0.03
banana
----------
10
0.23
lemon
----------

我认为您的数据结构应该改变。它不是什么都非常有用。苹果中的15.07是什么意思?也许做一个JSONObjects的JSONArray ...会更整洁和容易解析

您想尽一切努力摆脱硬编码索引...(getJSONArray( 0 ))

答案 1 :(得分:0)

我们在这里:

var listStr: JSONArray? = null

val json = "{type_history:[[15,0.07,apple],[13,0.03,banana],[10,0.23,lemon]]}"
val jsonObject = JSONObject(json)

val jsonArray = jsonObject.getJSONArray("type_history")

for(i in 0 until jsonArray.length()){
    listStr = jsonArray.get(i) as JSONArray
    for(x in 0 until listStr.length()) {
        Log.d("mlogs", listStr.get(x).toString())
    }
}