如何将数组附加到已有数组的json文件?

时间:2016-09-15 14:44:33

标签: java json jackson

我有一个name.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);
}

3 个答案:

答案 0 :(得分:1)

这里有一个合理的方式:

  1. 使用任何充足的JSON解析器来读取 JSON文件
  2. 这将导致该数组的内存中表示
  3. 将其他元素添加到该数组
  4. 使用其他库整个内容写入新文件
  5. EDIT;鉴于您对巨量的评论:

    那么,我会考虑分发整个处理过程。

    除此之外,我还会考虑您的总体要求:

    A)为什么你的数据会像这样出现?如果你知道事情应该进入一个 JSON数组;难道你不能改变你的“输入处理”来立即构建那个东西吗?

    B)或者反过来 - 你不能改变你的“跟进”过程,以了解数据不是一个,而是在几个JSON数组文件中?

    换句话说:您的要求似乎是“所有记录必须在一个JSON数组(文件)中”。你不能把它改为:“记录来自JSON数组(文件);并且有一个列表跟踪所有这些数组文件及其顺序?!

答案 1 :(得分: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());

答案 2 :(得分:0)

使用Jackson后,请考虑以下解决方案:

// 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"
} ]