【问题标题】:Appending a JS array to JSON after writing to and reading the JSON在写入和读取 JSON 后将 JS 数组附加到 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。我猜在写它或读东西的地方不太对劲,也将它与可能的重复帖子区分开来。

【问题讨论】:

标签: javascript json ionic-framework cordova-plugins


【解决方案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。 检查可能与您正在做的事情不同的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2016-08-14
    • 2017-11-23
    相关资源
    最近更新 更多