2015-07-15 2 views
1

Кто-нибудь знает лучший способ объединить 2 файла JSON? Я хочу переместить 'awardClaimForms' из файла 1 в файл 2, сохраняя при этом один и тот же номер. Если бы это было несколько, рассмотрели бы ручную работу, но я имею дело с чуть более 1 тыс. Записей. Любое направление или помощь будут оценены!Слияние файлов JSON

Файл 1 содержит:

{ 
    "Notices": [ 
     { 
      "awardClaimForms": "form-21", 
      "number": "2015-031" 
     }, 
     { 
      "awardClaimForms": "form22", 
      "number": "2015-030" 
     }, 
    ] 
} 

Файл 2 содержит:

{ 
    "Notices": [ 
     { 
      "number": "2015-031", 
      "link": "http://www.yahoo.com", 
      "title": "myother sample title", 
      "awardClaimDueDate": "March 01, 2013", 
      "datePosted": "12/01/2012" 
     }, 
     { 
      "number": "2015-030", 
      "link": "http://www.google.com", 
      "title": "my sample title", 
      "awardClaimDueDate": "March 01, 2013", 
      "datePosted": "12/01/2012" 
     }, 
    ] 
} 

Желаемый результат:

{ 
    "Notices": [ 
     { 
      "number": "2015-031", 
      "link": "http://www.yahoo.com", 
      "title": "myother sample title", 
      "awardClaimDueDate": "March 01, 2013", 
      "awardClaimForms": "form-21", 
      "datePosted": "12/01/2012" 
     }, 
     { 
      "number": "2015-030", 
      "link": "http://www.google.com", 
      "title": "my sample title", 
      "awardClaimDueDate": "March 01, 2013", 
      "awardClaimForms": "form-22", 
      "datePosted": "12/01/2012" 
     }, 
    ] 
} 
+0

Вы строите это.? Являются ли эти json объектами Java? – Praveen

+0

@Praveen Первый файл со страницы с сеткой таблицы со ссылками на сотни подробных страниц. Второй файл находится на всех подробных страницах. – Hectooorr

+0

Не могли бы вы сделать это в небольшой Java-программе? или у вас есть какое-то ограничение для этого. Если java в порядке, то я мог бы помочь вам с фрагментами кода. – Praveen

ответ

2
import org.apache.commons.io.IOUtils; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 

public class JsonMerge { 

    public static void main(String[] args) throws IOException, JSONException { 
// Read the json from the files 
     FileInputStream fileOne = new FileInputStream(new File("D:\\jsonOne.json")); 
     FileInputStream fileTwo = new FileInputStream(new File("D:\\jsonTwo.json")); 
     String stringOne = null, stringTwo = null; 
     try { 
      stringOne = IOUtils.toString(fileOne); 
      stringTwo = IOUtils.toString(fileTwo); 
     } finally { 
      fileOne.close(); 
      fileTwo.close(); 
     } 

// Convert them into json objects 
     JSONObject jsonOne = new JSONObject(stringOne); 
     JSONObject jsonTwo = new JSONObject(stringTwo); 

// Extract the arrays from the Notices Array 
     JSONArray jsonOneNoticesArray = jsonOne.getJSONArray("Notices"); 
     JSONArray jsonTwoNoticesArray = jsonTwo.getJSONArray("Notices"); 
     JSONObject mergedJsonArray = new JSONObject(); 

// Iterate and compare the required condition 
     for (int i = 0; i < jsonOneNoticesArray.length(); i++) { 
      for (int j = 0; j < jsonTwoNoticesArray.length(); j++) { 
       JSONObject mergedJson = new JSONObject(); 
       if (jsonOneNoticesArray.getJSONObject(i).getString("number").equals(jsonTwoNoticesArray.getJSONObject(j).getString("number"))) { 
        mergedJson.accumulate("number", jsonOneNoticesArray.getJSONObject(i).getString("number")); 
        mergedJson.accumulate("link", jsonOneNoticesArray.getJSONObject(i).getString("link")); 
        mergedJson.accumulate("title", jsonOneNoticesArray.getJSONObject(i).getString("title")); 
        mergedJson.accumulate("awardClaimDueDate", jsonOneNoticesArray.getJSONObject(i).getString("awardClaimDueDate")); 
        mergedJson.accumulate("datePosted", jsonOneNoticesArray.getJSONObject(i).getString("datePosted")); 
        mergedJson.accumulate("awardClaimForms", jsonTwoNoticesArray.getJSONObject(j).getString("awardClaimForms")); 
        mergedJsonArray.append("Notices", mergedJson); 
        break; 
       } 
      } 

     } 
     System.out.println("Done merging.. " + mergedJsonArray); 
    } 

} 

Добавление ниже линии (вместо System.out.println линии) может записать вывод в файл

FileUtils.write(new File("D:\\mergedJson.json"), mergedJsonArray.toString());

и здесь выход mergedJsonArray из приведенного выше кода.

enter image description here

+0

Спасибо! Это сделал трюк. – Hectooorr

Смежные вопросы