JSONArray无法转换为JSONObject错误。

6

当获取JSON数据时,我遇到了一个错误:

JSONArray无法转换为JSONObject

生成JSON的代码:

JSONObject parent = new JSONObject();
DatabaseHandler dbh = new DatabaseHandler(getApplicationContext());  
            for(int i=0; i < allEds.size(); i++){
                String edsText = allEds.get(i).getText().toString();                                           
               //spinner = allSpns.get(i);
               String spinSelected=allSpns.get(i).getSelectedItem().toString();                  
               try
                {
                   JSONObject json = new JSONObject();          
                   json.put("Id", i);
                   json.put("FieldName", edsText);
                   json.put("FieldType",spinSelected);
                   parent.accumulate("data", json);



                }
                catch (JSONException e)
                {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }                   

            }
Generated json is   
            {"data":
[{"FieldType":"Account Number","FieldName":"r","Id":0},
  {"FieldType":"Net      Banking Id","FieldName":"tt","Id":1}
 ]}
code for json read
------------------
JSONObject jsonObj = new JSONObject(folderStructure);
        JSONObject data = jsonObj.getJSONObject("data"); 
        String id = data.getString("Id"); 
        String value = data.getString("FieldName"); 
        Log.d("Item name: ", value);    

在阅读上述 JSON 时,我遇到了错误。 代码有什么问题吗?

添加读取 JSON 的代码。 - jeet
你把JSON代码放在JavaScript中的哪里? - Raj Adroit
3个回答

15
改变
JSONObject data = jsonObj.getJSONObject("data"); 

至于

JSONArray data = jsonObj.getJSONArray("data");

由于数据的值为JsonArray而不是JSONObject。

要获取单个ID和字段名称,您应该通过以下方式循环遍历此JSONArray:

for(int i=0; i<data.length(); i++)
{
     JSONObject obj=data.getJSONObject(i);
     String id = obj.getString("Id"); 
        String value = obj.getString("FieldName"); 
        Log.d("Item name: ", value);
}

@user1682133 您好,欢迎。请检查我的编辑答案,看它是否完全回答了您的问题。 - jeet
我认为将“JSONObject obj=data.JSONObject(i);”更改为“JSONObject obj=data.getJSONObject(i);”,这对我起作用了,谢谢 :) - user1682133
@jeet 我有同样的问题.........当我输入这个 JSONObject result=jsonobject.getJSONObject("result"); JSONArray result=jsonobject.getJSONArray("result"); 时,我得创建一个不同名称的结果数组......这意味着我该怎么做呢?如果有任何想法,请告诉我,谢谢。 - Amitsharma

3

使用这个方法:

private void showJSON(String response) {
        list = new ArrayList<>();
        String name = null;
        try {

            JSONArray jsonObject = new JSONArray(response);
            for(int i = 0; i < jsonObject.length(); i++) {
                JSONObject obj = jsonObject.getJSONObject(i);
                //store your variable
                list.add(obj.getString("Name"));
            }
//            JSONArray result = jsonObject.getJSONArray("");
//            JSONObject collegeData = result.getJSONObject(0);
//            list.add(jsonObject.getString(collegeData.getString("Name")));
            Toast.makeText(getActivity(), name, Toast.LENGTH_LONG).show();
            city_list.addAll(list);
            adapter.notifyDataSetChanged();
        } catch (JSONException e) {
            e.printStackTrace();
            // Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show();
        }

    }

0

data 是一个数组,而不是一个对象:

JSONArray data = jsonObj.getJSONArray("data"); 

我的当前代码是 String value = data.getString("FieldName"); - user1682133

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接