2017-05-09 56 views
0

我有一段代碼將兩個JSONArray合併爲一個。這是,如何結合兩個JSONArrays JAVA(以下特殊要求)

for (i = 0; i < cityJArray.length(); i++) 
{ 
    resultsJArray.put(cityJArray.getJSONObject(i)); 
} 

它的工作原理,因爲它增加了第二JSONArray(cityJArray)到第一(resultsJArray)。但是,我的要求是將第二個添加到第一個JSONArray的第一個數組(我無法用言語解釋道歉,但我會嘗試使用代碼解釋)。

這是把JSONObject:

{"results": 
[{"id": 248, 
"name": "Alternatif Cibubur", 
"slug": "alternatif-cibubur", 
"status": "active", 
"city": 
    {"id": 11, 
    "name": "Depok", 
    "slug": "depok", 
    }, 
"longitude": 106.900786}]} 

我已經把它轉換成JSONArray因爲我必須分開場「城市」,並改變其屬性名稱爲「city_id」,「CITY_NAME」,「city_slug」 。因爲它們將創建一個重複項,因爲它已經是'results'字段的屬性(請參閱給定的JSONObject)。

(目的:建立從JSONObject的.CSV文件)

(問題開始:當我嘗試從JSONObject的單獨一個領域,使之成爲不同的列)

JSONArrays細節:

resultsJArray:

[{"id": 248, 
"name": "Alternatif Cibubur", 
"slug": "alternatif-cibubur", 
"status": "active", 
"longitude": 106.900786}] 

cityJArray:

[{"id": 11, 
"name": "Depok", 
"slug": "depok" 
}] 

欲這種兩個分離式JSONArrays添加到一個這樣(下面是預期的輸出)

[{"id": 248, 
"name": "Alternatif Cibubur", 
"slug": "alternatif-cibubur", 
"status": "active", 
"longitude": 106.900786, 
"city_id": 11, 
"city_name": "Depok", 
"city_slug": "depok"}] 
+0

如上所示,'resultsJArray'實際上是一個JSONObject(因爲它是內'{封閉.. 。'',並且不清楚'cityJArray'是什麼(在'slug「後面也有一個逗號:」depok「,}'這看起來不正確 – dat3450

+0

對不起,slug後沒有逗號。實際上,JSONArray是用'[{.....}]'括起來的,我對這些錯誤表示歉意。 –

+0

請在上面的問題中更新'resultsJArray'和'cityJArray',然後清楚它們是什麼類型。 – dat3450

回答

0

這應根據需要工作,我注意到兩個陣列作爲字符串最初然後轉換既JSONArray。

String resultsString = "[{ 'id': 248, 'name': 'Alternatif Cibubur', 'slug': 'alternatif-cibubur', 'status': 'active', 'longitude': 106.900786 }]"; 
String cityString = "[{ 'id': 11, 'name': 'Depok', 'slug': 'depok' }]"; 

try 
{ 
    //Convert String into JSONArray for both results and city. 
    JSONArray resultsJArray = new JSONArray(resultsString); 
    JSONArray cityJArray = new JSONArray(cityString); 

    //Get the first and only JSONObject within each of the arrays. 
    JSONObject resultsJObject = resultsJArray.getJSONObject(0); 
    JSONObject cityJObject = cityJArray.getJSONObject(0); 

    //Get the required values from the JSONObject within city. 
    int city_id = cityJObject.getInt("id"); 
    String city_name = cityJObject.getString("name"); 
    String city_slug = cityJObject.getString("slug"); 

    //Put the values into the results JSONObject. 
    resultsJObject.put("city_id", city_id); 
    resultsJObject.put("city_name", city_name); 
    resultsJObject.put("city_slug", city_slug); 

    //Print to verify. 
    System.out.println("Updated resultsJArray: " + resultsJArray); 
} 
catch (JSONException e) 
{ 
    e.printStackTrace(); 
} 
+0

感謝您的回答。我會嘗試它並儘快更新。 –

+0

我已經嘗試了一些編輯後的答案和工作正常。我還有一個問題,我如何將JSONObject'resultsJObject'轉換爲新的JSONArray('JSONArray resultsJArrayFinal;')? –

+0

'JSONArray resultsJArrayFinal = new JSONArray();'後面跟'resultsJArrayFinal.put(resultsJObject);' – dat3450

0

使用包 「com.alibaba.fastjson」,代碼如下:

public static void CombinTest(){ 
    String a = "[{\"id\": 248, \n" + 
      "\"name\": \"Alternatif Cibubur\", \n" + 
      "\"slug\": \"alternatif-cibubur\", \n" + 
      "\"status\": \"active\", \n" + 
      "\"longitude\": 106.900786}]"; 
    String b = "[{\"id\": 11, \n" + 
      "\"name\": \"Depok\", \n" + 
      "\"slug\": \"depok\"\n" + 
      "}]"; 

    JSONArray resultObjArr = JSON.parseArray(a); 
    JSONArray cityObjArr = JSON.parseArray(b); 

      for (int i = 0; i < resultObjArr.size(); i++) 
      { 
       JSONObject city = cityObjArr.getJSONObject(i); 
       Set<String> keys = city.keySet(); 
       if(keys.size()>0){ 
        for(String key:keys){ 
         resultObjArr.getJSONObject(i).put("city_"+key,city.get(key)); 
        } 
       } 
      } 

      System.out.println(JSON.toJSONString(resultObjArr)); 
     } 
+0

感謝您的答案先生。我對上面的代碼有疑問,那就是如何在不獲取字符串'results'的情況下將'JSONObject aObject'解析爲'JSONArray resultObjArr'?因爲我有2個JSONArray,我已經將它轉換爲String。所以'結果'字段名稱已經不存在了,我不能通過'get()'字符串方法解析JSONObject。你能否建議我是否有辦法糾正它? –

+0

我改變了我的代碼,如上所述,我用你的2個JSONArrays作爲init數據 – handsp