2012-06-19 222 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