android - 如何从多个json对象中获取数据
问题描述
我知道如何从普通的 json 数据中获取数据,但最近我遇到了这个新问题,其中 json 看起来像
"product_1": {
"productId": "product_1",
"customerId": "customer_1",
"brandCode": "BRD0050",
"brandName": "ABC.ST.",
"productCode": 700251,
"productDesc": "ABC AB 50gm Sac",
"mrp": 15,
"expiry": 1608461977
},
"product_2": {
"productId": "product_2",
"customerId": "customer_1",
"brandCode": "BRD0050",
"brandName": "ABC.ST.",
"productCode": 700251,
"productDesc": "ABC AB 50gm Sac",
"mrp": 17,
"expiry": 1608462037
},
"product_3": {
"productId": "product_3",
"customerId": "customer_1",
"brandCode": "BRD0050",
"brandName": "ABC.ST.",
"productCode": 700251,
"productDesc": "ABC AB 50gm Sac",
"mrp": 17,
"expiry": 1608461978
}...
一直到product_150
所以我在谷歌上找了很长一段时间,但没有得到任何价值这是我尝试过的
try {
JSONObject obj = new JSONObject(loadJSONFromAsset());
// JSONArray m_jArry = obj.getJSONArray("product_" + j);
Iterator<String> keyIterator = obj.keys();
Log.e("Details",""+obj.keys().hasNext());
while(keyIterator.hasNext()) {
String productKey = keyIterator.next();
JSONObject jo_inside = obj.getJSONObject(productKey);
ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> m_li;
/* for (int i = 0; i < jo_inside.length(); i++) {
Log.e("Details",""+jo_inside.length());
Log.e("Details-->", jo_inside.getString("productId"));
String formula_value = jo_inside.getString("formule");
String url_value = jo_inside.getString("url");
//Add your values in your `ArrayList` as below:
m_li = new HashMap<String, String>();
m_li.put("formule", formula_value);
m_li.put("url", url_value);
formList.add(m_li);
}
*/
}
} catch (JSONException e) {
e.printStackTrace();
}
}
我从资产文件中获取数据的地方。我只尝试在Log中获取数据,任何线索我做错了什么或我的方法应该是什么?目前,我做了一个 for 循环直到 150 并获取这样的数据。
解决方案
我猜这obj.getJSONArray
不会返回任何东西,因为 JSON 没有被标记为数组。删除您的外部for
循环,然后使用obj.keys()
which 应该在您的 json 对象的顶层为您提供一个键数组,根据您提供的示例将是 [“product_1”,“product_2”,“product_3”],然后您可以循环例如,通过该数组获取每个生产对象;
Iterator<String> keyIterator = obj.keys();
while(keyIterator.hasNext())
{
String productKey = keyIterator.next();
JSONObject jo_inside = obj.getJSONObject(productKey);
... rest of your inner for loop here ...
}
推荐阅读
- oauth-2.0 - 使用自己的通用 oauth 2 连接字符串在 bot sdk4 中进行身份验证时出现错误请求
- ios - 使用动作将 CollectionView 滚动到下一个单元格
- node.js - heroku 角度部署找不到 dist/app-name/index.html
- java - Java - 为什么将 F 附加到 `float a=0.32F` 告诉它在 a 中存储 32 位浮点数,但执行 `float a = 0.32` 告诉它您要存储 64 位双精度数?
- php - 为什么 DateTime::createFromFormat('dmY H:i A', $date)->format('dmY') 将日期更改为下午 1 点之后的第二天?
- usb - 重置 USB 驱动程序
- ios - 更新到 Xcode 10 使值用“Optional()”包装
- java - 线程“主”java.lang.IllegalArgumentException 中的异常:找不到类
- angular - 如何在子组件中使用 FormArray 和父组件中的方法
- c# - 多个 if 和 else 语句混乱