2014-12-20 39 views
0

解碼這個問題與有關我以前question如何JSONObject的

我能順利拿到從URL JSON格式的字符串到我的春天控制器

現在我必須把它

解碼等等我不喜歡下面

@RequestMapping("/saveName") 
@ResponseBody 
public String saveName(String acc) 
{jsonObject = new JSONObject(); 
    try 
    { 
    System.out.println(acc); 
    org.json.JSONObject convertJSON=new org.json.JSONObject(acc); 

    org.json.JSONObject newJSON = convertJSON.getJSONObject("nameservice"); 
    System.out.println(newJSON.toString()); 
    convertJSON = new org.json.JSONObject(newJSON.toString()); 
    System.out.println(jsonObject.getString("id")); 

    } 
    catch(Exception e) 
    { 
     e.printStackTrace();jsonObject.accumulate("result", "Error Occured "); 
    } 
    return jsonObject.toString(); 
} 

這是JSON字符串{ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "RjhjhjR" } ] }

當我運行的代碼,然後我得到的錯誤

org.json.JSONException: JSONObject["nameservice"] is not a JSONObject. 

我做錯了什麼?

+1

名稱服務是JSONArray []表示JSONArray – jenuine

+0

有沒有你喜歡用整個字符串工作,然後寫分析的邏輯理由嗎?也許你應該閱讀http://codetutr.com/2013/04/09/spring-mvc-easy-rest-based-json-services-with-responsebody/ – hofan41

+0

@ hofan41感謝您的建議,Android的人會向我發送數據這種格式,我有商店ID和名稱在DB.So我將JSON字符串轉換爲JSON對象,然後解碼它。如果您有其他方式,然後請張貼爲答案 – rocking

回答

2

這不是一個JSONObject,這是一個JSONArray

從你的問題:

{ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "RjhjhjR" } ] } 

的的名稱服務鍵告訴你[後,它是一個數組。它會需要一個{來表示一個對象,但它不是

因此,改變你的代碼,使用它作爲一個JSONArray,然後遍歷的是內容,以獲取裏面的JSONObjects,如

JSONArray nameservice = convertJSON.getJSONArray("nameservice"); 
for (int i=0; i<nameservice.length(); i++) { 
    JSONObject details = nameservice.getJSONObject(i); 
    // process the object here, eg 
    System.out.println("ID is " + details.get("id")); 
    System.out.println("Name is " + details.get("name")); 
} 

更多細節

+0

謝謝你的答案,你能告訴我我將如何獲得名稱和ID? – rocking

+0

您需要遍歷數組,從中取出JSONObjects。見編輯 – Gagravarr

+0

如果我給了'[{「id」:7413,「name」:「ask」},{「id」:7414,「name」:「josn」},{「id」:7415, 「:」john「},{」id「:7418,」name「:」RjhjhjR「}]'那麼怎麼辦。請告訴我 – rocking

1

好像你正在試圖獲得一個JSONObject當「名稱服務」是一個JSONObjects的數組,而不是一個對象本身查看JSONArray javadocs。你應該試試這個:

JSONObject json = new JSONObject(acc); 
JSONArray jsonarr = json.getJSONArray("nameservice"); 

for (int i = 0; i < jsonarr.length(); i++) { 
    JSONObject nameservice = jsonarr.getJSONObject(i); 
    String id = nameservice.getString("id"); 
    String name = nameservice.getString("name"); 
} 
1

我不明白你爲什麼這麼做,如果你已經有了Spring Framework。

看看MappingJackson2HttpMessageConverter並相應地配置您的ServletDispatcher。 Spring會自動將你的對象轉換成JSON字符串,反之亦然。

後您的控制器方法將看起來像:

@RequestMapping("/saveName") 
@ResponseBody 
public Object saveName(@RequestBody SomeObject obj) { 
    SomeObject newObj = doSomething(obj); 
    return newObj; 
} 
+0

抱歉,我不知道該怎麼辦 – rocking

+0

試着調查這個例子,您的問題的常見方法:http:// www。journaldev.com/2552/spring-restful-web-service-example-with-json-jackson-and-client-program –