我正在尝试解析{"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"
如何修复我的代码以从该数组获取价值?
答案 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())
}
}