簡體   English   中英

Android - 解析 Java 中的 JSON 字符串

[英]Android - parsing JSON strings in Java

我有一個 JSON 字符串,我只是想訪問它的不同屬性並將它們存儲在 Java 變量中。 但是,我不斷收到以下代碼的異常:

    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":"test","event_address":"Test","event_duration":"3","event_date":"20110527","event_time":"1347", "event_description":"Test","num_attending":"1"}]

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

我得到的例外是:

“org.json.JSONException:值[//高於 JSON 字符串//] 類型的 org.json.JSONArray 無法轉換為 JSONObject”

Eclipse 沒有告訴您,因為您試圖從 JSONArray 創建 JSONObject:

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

回答您的最后一條評論(為什么會這樣?):

來自(原始文檔](http://www.json.org/java/index.html):

JSONObject 是名稱/值對的無序集合。 它的外部形式是一個用大括號括起來的字符串,名稱和值之間用冒號分隔,值和名稱之間用逗號分隔。 內部形式是一個 object,具有 get() 和 opt() 方法用於按名稱訪問值,以及 put() 方法用於按名稱添加或替換值。 這些值可以是以下任何類型:Boolean、JSONArray、JSONObject、數字和字符串,或 JSONObject.NULL object。

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

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

您正在嘗試將 JSONArray 解析為 JSONObject

JSONArray jarray = new JSONArray(jString);

格子!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM