2015-06-25 8 views
0

У нас есть пустой файл JSON Я хочу написать новые объекты JSON в этом файле и получить из него массив объектов JSON (и после просто добавить новые JSON в массив с помощью 'push') Я пишу в файл входящий объект JSON :Почему не удается разобрать JSON из файла?

fs.writeFileSync(tasks, updatedJsonStr, encoding='utf8'); 

где

updatedJsonStr = JSON.stringify({"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}); 

Таким образом, в файле, который мы видим добавлен объект. После того как мы получаем из файла наши JSON объекты:

tasksJsonObj = JSON.parse(fs.readFileSync("tasks.json", "utf-8")); 

Append новый объект JSON в виде строки и записать его снова:

updatedJsonStr = JSON.stringify(tasksJsonObj) + ',' + JSON.stringify(newJsonTask); 

fs.writeFileSync (задачи, updatedJsonStr, кодирование = 'utf8') ; Итак, мы видим 2 объекта JSON в файле. Но когда я пытаюсь прочитать файл с 2-х объектов JSON - я получил ошибку при чтении JSON из файла ([SyntaxError: Неожиданное фишку,]):

try{ 
 
    tasksJsonObj = JSON.parse(fs.readFileSync(tasks, "utf-8")); 
 
    console.log('aaaaa' + JSON.stringify(tasksJsonObj)); 
 
    return true; 
 
    }catch (err) { 
 
    console.log("its not ok!"); 
 
    console.log(err); 
 
    return false; 
 
    }

+0

«У меня есть ошибка» - эй, я все из-за напряженного письма в литературе, но здесь я бы предпочел, чтобы вы на самом деле сказали нам, «что» вы получили. Кроме того, добавление соответствующего тега, для которого язык/технология, с которой вы работаете, также будет хорошим. В * guess *, [tag: node.js]? –

+0

nodeJS, «SyntaxError: Неожиданный токен», – Spacemaster

+0

Когда вы даете ошибку, вы должны указать полную ошибку и ** строку, в которой он произошел **. Измените свой вопрос ссылкой «edit», чтобы включить его. –

ответ

0

Ваше образование JSON неверно,

{"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}, {"newisCompleted":false,"task":"dfgdfg","date":"25.06.2015"} 

Это то, что вы получите после того, как два JSON строят, а также недействительны.

Ваш JSON должен быть, как этот

[ {"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}, {"newisCompleted":false,"task":"dfgdfg","date":"25.06.2015"} ] 

для этого вы можете сделать что-то вроде этого

var tasks = []; 
tasks.push({"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"})); 

поэтому ваше обновление jsonstr будет

updatedJsonStr = JSON.stringify(tasks); 

снова, если вы хотите добавьте новую строку json, вы можете сделать это следующим образом:

tasksJsonObj = JSON.parse(fs.readFileSync("tasks.json", "utf-8")); 
tasksJsonObj.push(newJsonTask); 

, а затем подстройте его и напишите обратно в файл.

+0

Итак, когда я пытаюсь вставить новый элемент JSON в основной массив: var TasksJsonArray = []; функция readJsonContent() { try { TasksJsonArray = JSON.parse (fs.readFileSync (задачи, "utf-8")); ... .... TasksJsonArray.push (JSON.stringify (newJsonTask)); У меня есть ошибка 'undefined не является функцией' на линии, где пытаться нажать .. – Spacemaster

+0

Вы можете только нажимать объект не на строку json, делать вот это TasksJsonArray.push (newJsonTask); – Sark

+0

Огромное вам спасибо ... попробовал узнать много времени, как организовать этот адский механизм .. – Spacemaster

0

Если вы пытаетесь «расширить» объект:

https://lodash.com/docs#assign

deep extend (like jQuery's) for nodeJS

Если вы пытаетесь «толчок» новые объекты в массив, то вы почти там:

var updatedJsonStr = JSON.stringify([{"isCompleted":false,"task":"dfgdfg","date":"25.06.2015"}]); 

fs.writeFileSync(tasks, updatedJsonStr, encoding='utf8'); 

var tasksJsonArr = JSON.parse(fs.readFileSync("tasks.json", "utf-8")); 

tasksJsonArr.push(newJsonTask); 
0

Есть небольшая проблема с тем, что вы пишете. Если вы хотите иметь несколько JSONs рядом друг с другом, вы должны рассмотреть вопрос о создании их в массив:

updatedJsonStr = []; 
updatedJsonStr.push(JSON.stringify(tasksJsonObj)); 
updatedJsonStr.push(JSON.stringify(newJsonTask)); 

, а затем записать их в файл!

Смежные вопросы