2016-09-15 141 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" 
} ]