2016-09-15 143 views
0

我有name.json文件:如何將數組追加到已有數組的json文件中?

[ 
{"name" : "James", 
"Surname" : "Bond" 
}, 
{ 
"name" : "Abc", 
"Surname" : "Xyz" 
}] 

現在我要到另一個陣列添加到該現有文件:

[ 
    {"name" : "Brad", 
    "Surname" : "Pitt" 
    }, 
    { 
    "name" : "Angelina ", 
    "Surname" : "Jolie " 
    } 
] 

結果應該是這樣的:

[ 
    {"name" : "James", 
    "Surname" : "Bond" 
    }, 
    { 
    "name" : "Abc", 
    "Surname" : "Xyz" 
    }, 
     {"name" : "Brad", 
     "Surname" : "Pitt" 
     }, 
     { 
     "name" : "Angelina ", 
     "Surname" : "Jolie " 
     } 
    ] 

但我有這樣的結果:

[ 
{"name" : "James", 
"Surname" : "Bond" 
}, 
{ 
"name" : "Abc", 
"Surname" : "Xyz" 
}]  
    [ 
    {"name" : "Brad", 
    "Surname" : "Pitt" 
    }, 
    { 
    "name" : "Angelina ", 
    "Surname" : "Jolie " 
    } 
] 

如何解決這個問題?

我正在向這樣的文件附加數據。

void writeJson(JSONArray jsonDataObject){ 
    ObjectMapper mapper = new ObjectMapper(); 
    ObjectWriter writer = mapper.writer(new DefaultPrettyPrinter()); 
    writer.writeValue(new File("/home/cp/name.json"), jsonDataObject); 
} 
+1

後這裏的代碼 – Vel

+0

好了,不要在你的文本中插入支架編輯。或者你有沒有機會使用IDE和編程?因爲我們不知道。 –

+0

事情是,我想每次追加JSONArry到磁盤上的文件,我正在使用eclipse。 – Bond

回答

0

使用您喜歡的JSON庫(我將使用json.org這個例子):

JSONArray fullJsonArray = new JSONArray(); 

JSONArray list1 = JSONArray.fromObject(jsonString1); 
JSONArray list2 = JSONArray.fromObject(jsonString2); 

jsonArray.addAll(list1.toCollection()); 
jsonArray.addAll(list2.toCollection()); 
1

的一個合理這裏的方法:

  1. 使用任大量的JSON解析器到閱讀的JSON文件
  2. 這將導致我該數組的正內存表示
  3. 添加額外的元件到該陣列
  4. 使用另一個庫寫入全部內容到一個新文件

EDIT;鑑於你對大量的評論:

那麼,我會考慮分發整個處理。

而且除此之外我還要看看你的總體要求是:

A)爲什麼你的數據顯示這樣的嗎?如果你知道事情應該進入一個 JSON數組;你能不能改變你的「輸入處理」來立即建立這個東西?

B)或者其他方式 - 你不能改變你的「跟進」過程,以瞭解數據不是在一個,而是在幾個JSON數組文件?

換句話說:您的要求似乎是「所有記錄必須位於單個JSON數組(文件)內」。難道你不能改變它:「記錄是在JSON數組(文件);並有一個列表記錄所有這些陣列文件及其順序?!

+0

我正在寫JSONArray 5000次,每個JSONArray中有1000個對象。文件的最終大小約爲10 GB(10 mil記錄)。 – Bond

+0

我明白了。我對我的答案進行了更新;希望有所幫助。 – GhostCat

0

一旦你使用的是傑克遜,請考慮以下解決方案:

// First JSON 
String json1 = "[{\"name\":\"James\",\"Surname\":\"Bond\"}," 
      + "{\"name\":\"Abc\",\"Surname\":\"Xyz\"}]"; 

// Second JSON 
String json2 = "[{\"name\":\"Brad\",\"Surname\":\"Pitt\"}," 
      + "{\"name\":\"Angelina \",\"Surname\":\"Jolie\"}]"; 

// Create ObjectMapper instance to manipulate JSON 
ObjectMapper mapper = new ObjectMapper(); 

// Parse the JSON strings into the Jackson tree model 
JsonNode tree1 = mapper.readTree(json1); 
JsonNode tree2 = mapper.readTree(json2); 

// Append the second tree to the first tree 
((ArrayNode) tree1).addAll((ArrayNode) tree2); 

// Serialize the tree into a string 
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(tree1); 

這將產生如下結果:

[ { 
    "name" : "James", 
    "Surname" : "Bond" 
}, { 
    "name" : "Abc", 
    "Surname" : "Xyz" 
}, { 
    "name" : "Brad", 
    "Surname" : "Pitt" 
}, { 
    "name" : "Angelina ", 
    "Surname" : "Jolie" 
} ]