首页 > 解决方案 > 如何从多个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 并获取这样的数据。

标签: androidjsonarraylist

解决方案


我猜这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 ...
}

推荐阅读