2015-09-02 2 views
0

Для того, чтобы объединить 2 JSON массива в одном я использую следующий код (входные данные areJSON массивы, wereconverted в строку)Как совместить в JSon массивы

private static String combineData(String Data, String data){ 
    if (empty(data)) 
     data = Data; 
    else { // need to append the data 
     try { 
// first, convert the strings back to JSON objects 
      JSONObject jsonObj1 = new JSONObject(data); // existing data 
      JSONObject jsonObj2 = new JSONObject(Data); // new data 
      // Getting Array of Providers 
      String fieldName = context.getString(R.string.JSON_COMP_RECORDS); 
// Second, get the array out of the JSON object 
      JSONArray record1 = jsonObj1.getJSONArray(fieldName); 
      JSONArray record2 = jsonObj2.getJSONArray(fieldName); 
// Third, join them into one array 
      JSONArray arr = new JSONArray(); 
// LOOP 1 - get individual JSON objects 
      for (int i = 0; i < record1.length(); i++) { 
       JSONObject c; 
       try { 
        c = record1.getJSONObject(i); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
        return data; 
       } 
       arr.put (c); 
      } 
// LOOP 1 - get individual JSON objects 
      for (int i = 0; i < record2.length(); i++) { 
       JSONObject c; 
       try { 
        c = record2.getJSONObject(i); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
        return data; 
       } 
       arr.put (c); 
      } 
      JSONObject json = new JSONObject(); 
      json.put (context.getString(R.string.JSON_COMP_RECORDS), arr); 
      data = json.toString(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
    return data; 
} 

Интересно, есть ли способ сделать это более эффективно и избавиться от 2 петель?

+0

Глядя на него более внимательно, чем мой ранее бесполезный комментарий, да - создать новую функцию. Вы должны использовать только цикл for в функции. Вам придется передать данные String, поскольку это часть catch (мне не нравится передавать переменные в функциях, но хорошо). Вы можете вернуть c, который затем помещается в массив, а не проходить вокруг массива. Я бы написал это как ответ, но моя Java ржавая, поэтому я оставлю это кому-то еще. – dgBP

+0

@SagePawan. Спасибо, это сработало – Zvi

ответ

0

Как насчет этого? Вы можете поместить JSONObject непосредственно ИНТ другого массив

JSONArray record1 = jsonObj1.getJSONArray(fieldName); 
JSONArray record2 = jsonObj2.getJSONArray(fieldName); 
for (int i = 0; i < record1.length(); i++) { 
    JSONObject c; 
    try { 
      c = record1.getJSONObject(i); 
    } catch (JSONException e) { 
      e.printStackTrace(); 
      return data; 
    } 
    record2.put (c); 
} 
0

Надеется, что это помогает

JSONArray record1 = jsonObj1.getJSONArray(fieldName); 
JSONArray record2 = jsonObj2.getJSONArray(fieldName); 

for (int i = 0; i < record1.length(); i++) {  
    record2.put(record1.getJSONObject(i)); 
} 
Смежные вопросы