在Android / Java中解析JSON对象获取org.json.JSONException错误消息

时间:2015-08-15 04:57:13

标签: java android jsp

我从服务响应中收到以下JSON格式数据。我无法解析JSON数据。任何人都可以在我犯错的地方帮助我。

{
    "data": {
        "companyInfo": {
            "name": "san",
            "registration_number": "222",
            "registration_date": null,
            "address_id": "15",
            "bank_id": "34",
            "logo": null,
            "utr_number": null,
            "insurance_number": null,
            "paypal_id": null,
            "active": "yes",
            "created_date": "2015-08-03 16:39:34",
            "company_id": "12",
            "vat_number": null,
            "vat_percent": null,
            "vat_ref_number": null,
            "vat_status": null,
            "vat_date": "0000-00-00 00:00:00",
            "account_number": null,
            "sort_code": null,
            "swift_code": null,
            "iban": null,
            "iban_flag": null,
            "bank_flag": null,
            "bank_name": "san"
        },
        "userInfo": {
            "id": "11",
            "full_name": "san",
            "email": "san@san.com",
            "address_id": "15",
            "company_id": "12",
            "business_category_id": "1",
            "user_type": "0",
            "active": "yes",
            "created_date": "2015-08-03 16:39:34",
            "postal_address": null,
            "street1": "san",
            "street2": null,
            "state": "nepal",
            "zip": null,
            "phone1": "8765",
            "phone2": null,
            "website": null,
            "country": "United States"
        }
    },
    "status": true,
    "message": "Logged in successfully"
}

以下是解析JSON对象的java代码。

@Override
        protected String doInBackground(String... arg0) {
            String login = "false";
            // Creating service handler class instance
            ServiceHandler sh = new ServiceHandler();

            // Making a request to url and getting response
            url = getResources().getString(R.string.Login_Url);
            //url = getString(R.string.Login_Url);
            String jsonStr = sh.makeServiceCall(url, ServiceHandler.POST, params);

            Log.d("Response: ", "> " + jsonStr);

                try {

                    JSONObject jsonObj = new JSONObject(jsonStr);
                        JSONObject structure = (JSONObject) jsonObj.get("companyInfo");
                        String a = structure.get("name").toString();

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

            return login;
        }

我正在收到错误消息

org.json.JSONException: No value for companyInfo.

因为我的回复中有一个名为companyInfo的JSON onject。我无法找出我所犯的错误在哪里。

2 个答案:

答案 0 :(得分:2)

有点偏离主题,但我建议使用jackson来处理json输入/输出:你可以直接从json输入实例化对象或获取对象的json值。

ie:Json String to Object

// get the json
String jsonStr = sh.makeServiceCall(url, ServiceHandler.POST, params);

// get the object from the json
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(jsonStr, User.class);

// get user.data.companyInfo.name
String name = null;
if(user != null && user.getData() != null && user.getData().getCompanyInfo() != null)
    name = user.getData().getCompanyInfo().getName();

doc:http://wiki.fasterxml.com/JacksonHome

答案 1 :(得分:1)

还有一个JSONObject名为datacompanyInfo位于其中。你忘记先解析它。所以解析data,然后解析companyInfo

@Override
        protected String doInBackground(String... arg0) {

            // Creating service handler class instance
            ServiceHandler sh = new ServiceHandler();

            // Making a request to url and getting response
            url = getResources().getString(R.string.Login_Url);
            //url = getString(R.string.Login_Url);
            String jsonStr = sh.makeServiceCall(url, ServiceHandler.POST, params);

            Log.d("Response: ", "> " + jsonStr);

                try {

                    JSONObject jsonObj = new JSONObject(jsonStr);
                    JSONObject data=(JSONObject)jsonObj.get("data");
                        JSONObject structure = (JSONObject) data.get("companyInfo");
                        String a = structure.get("name").toString();

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

            return login;
        }