Присоединение массива JS к JSON после записи и чтения JSON - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь сохранить данные в файл 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.
  • createвторой массив.
  • объединяет массивы.
  • stringify и записывает в json.

и файл имеет поврежденный JSON.Я предполагаю, что где-то писать или читать что-то не так, как надо, а также отличать его от возможного дублирующего сообщения.

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Ваше утверждение:

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)
0 голосов
/ 22 мая 2019

Хорошо, из вашего кода это должно выглядеть так:

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.Проверьте, что может отличаться от того, что вы делаете.

...