2011-05-27 143 views
0

我有一個JSON字符串,我只是試圖訪問它的不同屬性並將它們存儲在Java變量中。不過,我一直使用以下代碼獲得例外:Android - 解析Java中的JSON字符串

private JSONObject jObj; 
    private String jString; 

//... 
jString = result; //this is my JSON string passed from another activity 
     try { 

      jObj = new JSONObject(jString); 
      //int eventID = jObj.getInt("eventID"); 





     } catch (JSONException e) { 
      Toast.makeText(searchResultsActivity.this, "Search results failed!", Toast.LENGTH_SHORT).show(); 
      finish(); 
     } 

是的我有所需的導入。我自己顯示了jString以確認它是有效的JSON。我有點失落,因爲這似乎是我需要做的最基本的事情。感謝任何幫助人。

編輯 - 這裏是一個例子JSON字符串:

[{ 「EVENTID」: 「47」, 「EVENT_NAME」: 「測試」, 「EVENT_ADDRESS」: 「測試」, 「event_duration」: 「3」 ,「event_date」:「20110527」,「event_time」:「1347」,「event_description」:「Test」,「num_attending」:「1」}]

該字符串通過PHP腳本接收, json_encode($ array),其中$ array是創建此JSON響應的關聯數組。

我得到的例外是:

「org.json.JSONException:值[//上述JSON字符串//]類型的org.json.JSONArray不能被轉換爲JSONObject的」

+3

什麼是json異常,什麼是json字符串pls?你在做什麼*應該*工作。 – Taylor 2011-05-27 19:04:44

+0

我編輯我的帖子與字符串和錯誤。呃哦,我需要導入一些JSONArray的東西嗎? Eclipse沒有告訴我=( – JDS 2011-05-27 19:16:30

+0

我同意泰勒。如果您正在捕獲JSONException,那麼jString是**不是**有效的JSON字符串。 – Aleadam 2011-05-27 19:17:10

回答

1

的Eclipse沒有告訴你,因爲你正試圖從一個JSONArray創建一個JSONObject:

JSONArray jArr = new JSONArray (jString); 
int eventID = jArr.getJSONObject(0).getInt("eventID"); 

要回答你的最後一個註釋(這是爲什麼?):

從(原始文件] (http://www.json.org/java/index.html):

一個JSONObject是名稱/值對的無序集合其外形爲包裹在以c大括號的字符串名稱和值之間的聯繫,以及值和名稱之間的逗號。內部表單是一個具有get()和opt()方法的對象,用於按名稱訪問值,put()方法用於按名稱添加或替換值。這些值可以是以下任何類型:Boolean,JSONArray,JSONObject,Number和String,或JSONObject.NULL對象。

JSONArray是一個有序的值序列。 它的外部形式是一個用方括號括起來的字符串,兩個值之間用逗號隔開。內部表單是一個具有get()和opt()方法的對象,用於按索引訪問值,put()方法用於添加或替換值。這些值可以是以下任何類型:Boolean,JSONArray,JSONObject,Number和String,或JSONObject.NULL對象。

由於您解析的是以方括號而不是大括號開頭的字符串,因此需要將其解析爲JSONArray。在你的情況下,它是一個大小爲1的數組。

0

你是試圖解析一個JSONArray作爲一個JSONObject

JSONArray jarray = new JSONArray(jString);

GL!