2015-08-15 32 views
-1

我有下面的JSON格式數據從服務響應接收。我無法解析JSON數據。任何人都可以幫助我,我犯了什麼錯誤。解析Android/Java中的JSON對象獲取錯誤消息爲org.json.JSONException

{ 
    "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": "[email protected]", 
      "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

有點出入的主題,但我建議使用 - 傑克遜JSON的輸入/輸出的工作:你可以直接從JSON輸入實例化一個對象或把自己的對象的JSON值。

即:JSON字符串到對象

// 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

還有一個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; 
     } 
+0

是,這是做的最好的辦法???? – user3311567

+0

如果你正在獲取數據,我會建議你在onPostExecute方法中執行此操作。 – Shvet