2012-06-19 242 views
3

我有以下陣列回到了我的JAVA Android應用程序從PHP:如何在JAVA中解析JSONObjects的JSONArray?

Array ([0] => Array ([referral_fullname] => Name 1 [referral_balance] => 500) [1] => Array ([referral_fullname] => Name 2 [referral_balance] => 500)); 

在Java中,他們上面陣列看起來像這樣:

{"0":{"referral_fullname":"Name 1","referral_balance":"500"},"1":{"referral_fullname":"Name 2","referral_balance":"500"}}; 

對於我使用的是簡單的JSONObject:

JSONTokener tokener = new JSONTokener(result.toString()); 
JSONObject finalResult = new JSONObject(tokener); 

referral_fullname = finalResult.getString("referral_fullname"); 

但是對於我不知道的對象數組!

+0

這是否適合您? http://stackoverflow.com/questions/5650171/parsing-json-array-within-json-object-using-java – Slartibartfast

回答

2

如果可以的話,您應該使用

JSONArray finalResult = new JSONArray(tokener); 

。您的結構現在是一個包含兩個字段0和1的對象,其中包含另一個對象。你必須讓對象的數組來代替這種複合物的,如果你想要遍歷容易像

JSONObject jso; 
for(int i = finalResult.lenght-1; i >=0; i--){ 
    jso = finalResult.get(i); 
    // jso == {"referral_fullname":"Name 1","referral_balance":"500"} 

    [whatever] 

} 
4
String str = your Json-> apply to.String(); 

    JSONObject jObject = new JSONObject(str); 


    Map<String,String> map = new HashMap<String,String>(); 
    Iterator iter = jObject.keys(); 
    while(iter.hasNext()){ 
     String key = (String)iter.next(); 
     String value = jObject .getString(key); 
     map.put(key,value); 
    } 
3

您的JSON語法是錯誤的,JSONArray應該是這樣的:

["0":{"referral_fullname":"Name 1","referral_balance":"500"},"1":{"referral_fullname":"Name 2","referral_balance":"500"}]; 

並解析JsonArray,其中包含一些JSONObject,請嘗試此操作:

//parse the result 
      JSONObject jsonResult = null; 
      JSONArray arrayResult = null; 
      ArrayList<YourObject> listObjects = null; 
      try { 
       arrayResult = new JSONArray(result); 
       if(arrayResult != null) { 
        listObjects = new ArrayList<YourObject>(); 
        int lenght = arrayResult.length(); 
        for(int i=0; i< lenght; i++) { 
         JSONObject obj = arrayResult.getJSONObject(i); 
         YourObject object = new YourObject(obj); 
         listObjects.add(object); 
        } 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

而在你YourObject類添加一個構造函數,以您的JSON轉換爲一個實例:

public YourObject(JSONObject json) { 
    if (!json.isNull("referral_fullname")) 
     this.referral_fullname = json.optString("referral_fullname", null); 
    if (!json.isNull("referral_balance")) 
     this.referral_balance = json.optString("referral_balance", null); 
} 
+0

你是對的,我再次檢查,發現返回值不是一個對象的數組,但看起來像對象一樣。這怎麼可能?我甚至試圖解析它作爲一個數組,我得到一個錯誤,說'JSONObject'不能轉換成'JSONArray'。我應該在我的'PHP'代碼中改變一些東西,讓它像一個對象數組一樣返回,或者像現在一樣解析它? –

+0

你應該在你的php代碼中返回一個數組數組,然後嘗試將它轉換爲json:json_encode(yourArrayOFResult); – Houcine

+0

我對'新的JSONArray(result)'感到困惑。什麼版本的json-lib支持這個?我已經看到這個構造函數簽名(帶有字符串參數),但是當我嘗試使用json-lib-2.4-jdk15.jar時,它說JSONArray的唯一構造函數不帶任何參數(如下所示:http:// json-lib.sourceforge.net/apidocs/jdk15/index.html)。 – LarsH

1

試試這個.............

final JSONArray result_array = json.getJSONArray("result"); 

for (int i = 0; i < result.length(); i++) { 

JSONObject joObject = result_array.getJSONObject(i); 
String jName = joObject.get("referral_fullname").toString(); 
String jbalance = joObject.get("referral_balance").toString(); 

        } 
1

首先做出JSON對象,然後在內部層次看到你有數組然後獲取數組。 您需要先製作JSON對象。例如,如果RESP是一個字符串(例如來作爲HTTP響應)

JSONObject jsonObject = new JSONObject(resp); 

的JSONObject可以含有其他JSON對象或JSON陣列。如何轉換JSON取決於響應。 如果arraykey是JSON對象中的數組,那麼我們可以通過以下方式獲取數組的列表。

JSONArray arr = jsonObject.getJSONArray("arraykey"); 

檢查arr的長度,如果大於0,則它包含JSON對象或JSON數組,取決於數據。 有一個關於JSON字符串到JSON數組的一些完整示例可以在 http://www.hemelix.com/JSONHandling