-1

我正在开发一个我得到JSON响应的应用程序。响应如下:

    [
    {
        "CID": 5,
        "ChildMenus": [],
        "Level": null,
        "MenuUrl": "",
        "Name": "Jewelry",
        "PCID": 235,
        "REnum": null,
        "isLooseDiamond": "NO"
    },
    {
        "CID": 122,
        "ChildMenus": [],
        "Level": null,
        "MenuUrl": "",
        "Name": "Collection",
        "PCID": 235,
        "REnum": null,
        "isLooseDiamond": "NO"
    },
    {
        "CID": 459,
        "ChildMenus": [],
        "Level": null,
        "MenuUrl": "http://jewelry.roughdiamondxchange.in/Guide.aspx",
        "Name": "Education",
        "PCID": 235,
        "REnum": null,
        "isLooseDiamond": "NO"
    },
    {
        "CID": 483,
        "ChildMenus": [],
        "Level": null,
        "MenuUrl": "",
        "Name": "Design Your Own ",
        "PCID": 235,
        "REnum": null,
        "isLooseDiamond": "NO"
    },
    {
        "CID": 486,
        "ChildMenus": [],
        "Level": null,
        "MenuUrl": "http://jewelry.roughdiamondxchange.in/About.aspx",
        "Name": "Policy",
        "PCID": 235,
        "REnum": null,
        "isLooseDiamond": "NO"
    },
    {
        "CID": 56,
        "ChildMenus": [],
        "Level": null,
        "MenuUrl": "",
        "Name": "Diamonds",
        "PCID": 235,
        "REnum": null,
        "isLooseDiamond": "YES"
    },
    {
        "CID": 611,
        "ChildMenus": [],
        "Level": null,
        "MenuUrl": "",
        "Name": "Overview",
        "PCID": 235,
        "REnum": null,
        "isLooseDiamond": "NO"
    }
]

为了解析这个我使用了下面的代码

try {
    // Getting Array of Contacts
    /*JSONObject jsonObject = new JSONObject(json);*/
    /*JSONArray array = json.getJSONArray("Value");*/
    JSONArray array=new JSONArray();
    array.put(getJSONFromUrl());

    // looping through All Contacts
    for(int i = 0; i < array.length(); i++){
        JSONObject c = array.getJSONObject(i);
        /*  JSONObject object = jsonObject.getJSONObject("FirstObject");*/
        // Storing each json item in variable
        /*String cid = c.getString(TAG_CID);*/
        String name = c.getString(TAG_NAME);
        String pcid = c.getString(TAG_PCID);
        String menuurl = c.getString(TAG_MENUURL);

        // Phone number is agin JSON Object

        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();

        // adding each child node to HashMap key => value
        /*  map.put(TAG_CID, cid);*/
        map.put(TAG_NAME, name);
        map.put(TAG_PCID, pcid);
        map.put(TAG_MENUURL, menuurl);

        // adding HashList to ArrayList
        menuList.add(map);
    }

} catch (JSONException e) {
    e.printStackTrace();
}

它给了我一个org.json.JSONException: No value for name错误。我无法解析数据。我将不胜感激有关如何解析日期的任何想法。

4

4 回答 4

0

尝试这个

                     List<String>mCid = new ArrayList<String>();
         List<String>mLevel = new ArrayList<String>();
         String value,result;
         InputStream is,in;
         JSONArray jArray = null;

           try {

                   HttpClient httpclient=new DefaultHttpClient();
                HttpPost httppost=new HttpPost("url");
                //namevaluepair=new ArrayList<NameValuePair>(1);
                //namevaluepair.add(new BasicNameValuePair("key",value));//if you want to send data to server

                //httppost.setEntity(new UrlEncodedFormEntity(namevaluepair));
                HttpResponse httpresponse=httpclient.execute(httppost);
                in=httpresponse.getEntity().getContent();
            //inputStream = response.getEntity().getContent();
            }catch(Exception e){Log.e("","error in http connection");}

            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(in,"iso-8859-1"),8);
                StringBuilder sb1 = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                        sb1.append(line + "\n");
                }
                in.close();
                result=sb1.toString();

                       Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show();
                      try{
                      JSONObject json=new JSONObject(result);

                       jArray=json.getJSONArray("Array_name_in_response"); //whatever name of your array in response
                       System.out.println(jArray.length());

                        //if(jArray.length()!=0){
                       for(int i=0;i<jArray.length();i++)
                        {

                         value = jArray.getJSONObject(i).optString("CID");
                         mCid.add(value);
                         value = jArray.getJSONObject(i).optString("Level");
                         mLevel.add(value);
                         System.out.println(value);
                        } 
                    // }

                   }catch(JSONException e){
                        Log.e("log_tag", " Error parsing data "+e.toString());
                        }


        }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
        }
于 2012-09-18T07:29:48.287 回答
0

检查字符串 TAG_NAME = "Name" 而不是 "name"

于 2012-09-18T06:15:02.490 回答
0

我认为您需要检查 String TAG_NAME。将您的代码更改为以下代码后进行更改。希望它会帮助你。

 for(int i = 0; i < array.length(); i++){
            JSONObject c = array.getJSONObject(i);
            /*  JSONObject object = jsonObject.getJSONObject("FirstObject");*/
            // Storing each json item in variable
            /*String cid = c.getString(TAG_CID);*/
            String name = c.getString("Name");
            String pcid = c.getString("PCID");
            String menuurl = c.getString("MenuUrl");

            // Phone number is agin JSON Object

            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();

            // adding each child node to HashMap key => value
            /*  map.put(TAG_CID, cid);*/
            map.put("Name", name);
            map.put("PCID", pcid);
            map.put("MenuUrl", menuurl);

            // adding HashList to ArrayList
            menuList.add(map);
        }
于 2012-09-18T07:02:58.223 回答
0

当您尝试访问不在 jsonObject 中的 TAG_NAME 时会发生此错误。通过has(TAG_NAME)返回布尔值 检查 TAG_NAME 的存在

字符串名称 = c.getString(TAG_NAME);

于 2012-09-18T06:18:04.773 回答