【问题标题】:How to map json object to jsonarray in Java?如何在Java中将json对象映射到jsonarray?
【发布时间】:2018-01-06 08:42:18
【问题描述】:

如何将此JsonObject 映射到JsonArray 以获取键和值?

我想使用该值来填充微调器并将键设置为从微调器中选择的项目的 id。

"data": {
    "214": "FIRST CITY MONUMENT BANK PLC",
    "215": "UNITY BANK PLC",
    "221": "STANBIC IBTC BANK PLC",
    "232": "STERLING BANK PLC",
    "301": "JAIZ BANK",
    "304": "Stanbic Mobile",
    "305": "PAYCOM",
    "307": "Ecobank Mobile",
    "309": "FBN MOBILE",
    "311": "Parkway",
    "315": "GTBank Mobile Money",
    "322": "ZENITH Mobile",
    "323": "ACCESS MOBILE",
    "401": "Aso Savings and Loans",
    "044": "ACCESS BANK NIGERIA",
    "014": "AFRIBANK NIGERIA PLC",
    "063": "DIAMOND BANK PLC",
    "050": "ECOBANK NIGERIA PLC",
    "084": "ENTERPRISE BANK LIMITED",
    "070": "FIDELITY BANK PLC",
    "011": "FIRST BANK PLC",
    "058": "GTBANK PLC",
    "030": "HERITAGE BANK",
    "082": "KEYSTONE BANK PLC",
    "076": "SKYE BANK PLC",
    "068": "STANDARD CHARTERED BANK NIGERIA LIMITED",
    "032": "UNION BANK OF NIGERIA PLC",
    "033": "UNITED BANK FOR AFRICA PLC",
    "035": "WEMA BANK PLC",
    "057": "ZENITH BANK PLC"
}

这是我的代码,但它不起作用。我正在使用谷歌的 Volley 库。我被告知将JsonObject 转换为JsonArray

private void getData() {
    JsonObjectRequest obreq = new JsonObjectRequest(Request.Method.GET, serverUrl_list,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONArray obj = response.getJSONArray("Data");

                        for (int k=0; k<obj.length(); k++) {
                            while (mapIterator.hasNext()) {
                                Map.Entry mapEntry = (Map.Entry) mapIterator.next();
                                Integer keyValue = (Integer) mapEntry.getKey();
                                String value = (String) mapEntry.getValue();
                                //iterate over the array and print each value
                                for (int i=0; i<mapEntry.; i++) {
                                    System.out.print(value[i] + " ");
                                }
                                System.out.println();
                            }
                        }

                        students.add(obj.getString("Data"));

                        ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, students);
                        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        Bank.setAdapter(spinnerAdapter);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("Volley", "Error");
                }
            }
        );

    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
    requestQueue.add(obreq);
}

【问题讨论】:

  • 如果我理解正确,您想将Map&lt;K,V&gt; 转换为List&lt;Pair&lt;K,V&gt;&gt;?如果您能显示一些代码,我们将不胜感激。
  • 我想转换为带有“id”和“bankname”的jsonarray,并用“bankname”填充我的微调器并将“id”设置为bankid
  • 你上面的json没有任何jsonarray。所以当你的代码出错时
  • 我不认为 Integer keyValue = (Integer) mapEntry.getKey(); 会按照你的预期工作

标签: java android hashmap android-volley gson


【解决方案1】:

您无法从 JSON 中获取数组,因为它是 {"data": { ... }} 而不是 {"data": [ ... ] }

你有一个对象,你需要遍历键

private void getData() {
    final ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    bank.setAdapter(spinnerAdapter);

    JsonObjectRequest obreq = new JsonObjectRequest(Request.Method.GET, serverUrl_list,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONObject obj = response.getJSONObject("Data");
                        Iterator<String> keys = obj.keys();
                        while(keys.hasNext()) {
                            String v = obj.optString(keys.next());
                            spinnerAdapter.add(v); 
                        }
                    } catch ( ) {  }
                }
             },

【讨论】:

【解决方案2】:

看看我们一直在研究的library,它也是基于 volley 的。库将自己解析数据,而不是解析数据。您所要做的就是创建一个对象,其中包含一个名为 data 的地图字段,如下所示:

public class Model {
   private Map<String, String> data;
}

使用该库,它将提供您填写在地图中的结果。

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 2014-11-02
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    相关资源
    最近更新 更多