在写入和读取 JSON 后将 JS 数组附加到 JSON
Posted
技术标签:
【中文标题】在写入和读取 JSON 后将 JS 数组附加到 JSON【英文标题】:Appending a JS array to JSON after writing to and reading the JSON 【发布时间】:2019-10-08 16:45:32 【问题描述】:我正在尝试将数据保存到 JSON 文件,第一次保存正常,第二次保存破坏了 JSON。这是我的数组的样子(例如简化):
var myArray1 = new Array (
Ex1 : "Ex1",
Ex2 : "Ex2",
Ex3 : "Ex3"
);
我将它保存为 JSON,它返回有效的 json,我读取它并尝试在这个数组之上保存另一个这样的数组:
var myArray2 = new Array (
Ex4 : "Ex4",
Ex5 : "Ex5",
Ex6 : "Ex6"
);
我尝试使用 concat 在 Chrome 控制台中创建它:
0:
Ex1: "Ex1"
Ex2: "Ex2"
Ex3: "Ex3"
__proto__: Object
1:
Ex4: "Ex4"
Ex5: "Ex5"
Ex6: "Ex6"
__proto__: Object
length: 2
__proto__: Array(0)
我假设现在使用 JSON.stringify 会使它成为有效的 JSON,但是当我将它保存到 JSON 时,它给了我这个:
[
"chosenDate": "May_2019_1",
"shiftName": "Test 1",
"startTime": "00:00",
"endTime": "01:00",
"payPerHour": "1.00"
]
[
"chosenDate": "May_2019_16",
"shiftName": "Test 2",
"startTime": "01:00",
"endTime": "02:00",
"payPerHour": "2.00"
]
第一个 JSON 在第一个“]”之前是完全相同的,所以 concat 最终什么也没做?我该如何解决这个问题才能生成有效的 JSON?
我不知道它是否会改变任何东西,但我正在尝试制作一个 ionicv1 应用程序,使用 cordova-file-plugin 来保存 JSON。
编辑: 所以我不确定为什么,但是当尝试在 Chrome 中使用我的示例时它可以工作,但是当通过我的应用程序运行它时,实际上将它放在一个文件中并从文件中读取它会返回损坏的 JSON。流程是:
创建第一个数组。 将其字符串化并写入 json 文件。 读取文件并解析 json。 创建第二个数组。 连接数组。 字符串化并写入 json。并且该文件具有损坏的 JSON。我猜在写它或读东西的地方不太对劲,也将它与可能的重复帖子区分开来。
【问题讨论】:
write/add data in JSON file using node.js的可能重复 JSON 文件很难追加(应该读取整个文件,然后解析,然后重写)。我建议改用JSONL - 一种几乎与 JSON 一样易于使用的格式。 【参考方案1】:您的陈述:
var myArray1 = new Array (
Ex1 : "Ex1",
Ex2 : "Ex2",
Ex3 : "Ex3"
);
创建一个包含一个对象的数组,然后执行两次,因此得到两个数组,每个数组包含 1 个对象。
您必须创建第一个数组,然后继续向它推送。
var myArray1 = new Array(
Ex1 : "Ex1",
Ex2 : "Ex2",
Ex3 : "Ex3"
);
myArray1.push(
Ex4: "Ex4",
Ex5: "Ex5",
Ex6: "Ex6"
)
console.log(myArray1)
【讨论】:
这给了我同样的结果 @anurag 你错过了 ',' 在值之后 kevin 检查现在【参考方案2】:好的,从你的代码来看应该是这样的:
const myArray1 = new Array (
Ex1 : "Ex1",
Ex2 : "Ex2",
Ex3 : "Ex3"
);
const myArray2 = new Array (
Ex4 : "Ex4",
Ex5 : "Ex5",
Ex6 : "Ex6"
);
const mergedArray = myArray1.concat(myArray2);
// Merged array is now:
// 0:
// Ex1: "Ex1"
// Ex2: "Ex2"
// Ex3: "Ex3"
// __proto__: Object
// 1:
// Ex4: "Ex4"
// Ex5: "Ex5"
// Ex6: "Ex6"
JSON.stringify(mergedArray, null, 4);
// Returns formatted JSON.
// "[
//
// "Ex1": "Ex1",
// "Ex2": "Ex2",
// "Ex3": "Ex3"
// ,
//
// "Ex4": "Ex4",
// "Ex5": "Ex5",
// "Ex6": "Ex6"
//
// ]"
我在 Chrome 控制台中尝试过 - 它返回有效的 JSON。 检查可能与您正在做的事情不同的地方。
【讨论】:
以上是关于在写入和读取 JSON 后将 JS 数组附加到 JSON的主要内容,如果未能解决你的问题,请参考以下文章