javascript - 如何将数组附加到现有的 json 数组并写入 Node js 中的文件

标签 javascript arrays json node.js

我有一个 example.json 文件。

{
  "tc" :
  [
    {"name" : "tc_001"},
    {"name" : "tc_002"},
    {"name" : "tc_003"},
    {"name" : "tc_004"},
    {"name" : "tc_005"}
  ]
}

在这里,我需要将另一个数组添加到 tc[0]th 索引。在 Node JS 我试过这个:

var fs = require('fs');

var obj = JSON.parse(fs.readFileSync('example.json', 'utf8'));
var arr1 = {bc :[{name:'bc_001'}]}
var arr2 = {bc :[{name:'bc_002'}]}
obj.tc[0] = arr1;
obj.tc[0] = arr2;

但是当打印 obj 时,obj.tc[0] 已被 arr2 的值替换。 我最终想要达到的结果是:

{
  "tc" :
  [
    {
       "name" : "tc_001"
       "bc" :
       [
            {"name" = "bc_001"},
            {"name" = "bc_002"}
       ]
    },
    {"name" : "tc_002"},
    {"name" : "tc_003"},
    {"name" : "tc_004"},
    {"name" : "tc_005"}
  ]
}

我还想将其写回同一个 json 文件。 我试图在这里实现一个包含多个具有唯一名称的 tc 的文件。此外,一个tc可以有多个bc,而bc有一个name属性。

我也接受关于更好的 json 结构来支持这个概念的建议。

最佳答案

将多个项目添加到对象的解决方案。

它使用一个对象 o 来放置新值,以及一个值对象 v 以及要分配的键和项目。

在它内部遍历键并构建一个新数组(如果不存在的话)。然后将所有值推送到数组。

function add(o, v) {
    Object.keys(v).forEach(k => {
        o[k] = o[k] || [];
        v[k].forEach(a => o[k].push(a));
    });
}

var obj = { "tc": [{ "name": "tc_001" }, { "name": "tc_002" }, { "name": "tc_003" }, { "name": "tc_004" }, { "name": "tc_005" }] };

add(obj.tc[0], { bc: [{ name: 'bc_001' }] });
add(obj.tc[0], { bc: [{ name: 'bc_002' }] });
document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');

关于javascript - 如何将数组附加到现有的 json 数组并写入 Node js 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36763938/

相关文章:

php - 在不从 PHP 脚本解析到 ajax 脚本的情况下返回 native 文本

php - 在 Underscore 模板中格式化日期

javascript - JavaScript 的 array map 原型(prototype)是不是有点偏差?

arrays - 将新元素附加到数组导致应用程序崩溃的异常错误

javascript - 如何使用 Windows 8 JSON.parse 将 JSON 文本反序列化为日期类型?

javascript - Rails 3 - 嵌套模型的 JSON 未按预期返回

javascript - 我想从数组中返回一个 JSON 对象

javascript - 如何知道输入何时更改其类别

javascript - 将 json 数组格式化为图表输入

java - Hamcrest 匹配器比较两个数组