2015-06-25 15 views
0

我们有空的JSON文件 我想在这个文件中写入新的JSON对象,并从中获取JSON对象数组(通过'push'后简单地向数组添加新的JSON) 我向文件写入传入的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")); 

追加新的JSON对象作为字符串,再写一遍:

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

fs.writeFileSync(任务,updatedJsonStr,编码= 'utf-8') ; 所以我们在文件中看到2个JSON对象。 但是当我尝试读取文件与2个JSON对象 - 我从文件中读取JSON时的误差(语法错误:意外的令牌,]):

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

“我得到了一个错误” - 嘿,我都是在文学上悬念写作,但在这里我宁愿你告诉我们*你得到了什么*错误。另外,为您所使用的语言/技术添加适当的标签也会很好。在猜测*,[tag:node.js]? –

+0

nodeJS,“SyntaxError:意外的标记”, – Spacemaster

+0

当您提供错误时,您必须指定完整的错误和**它发生的行**。使用“编辑”链接编辑您的问题以包含它。 –

回答

0

你的JSON形成是错误的,

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

这是你会得到concat后两个JSON stringify,这也是无效的。

你的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(){ 尝试TasksJsonArray = ... .... 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)); 

,然后将它们写入文件!