以json格式将.json格式的html格式的数据保存在.json文件中,并用javascript表示

新手在节点和expression我正在从HTML格式的用户input,并试图追加或推入一个.json文件。 我已经使用了jsonfile npm-package,但是它不是json的数组格式

代码附加 –

var express = require('express'); var app = express(); //jade --> ejs -->html app.engine('html', require('ejs').renderFile); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'html'); var jsonfile = require('jsonfile'); var file = './userdata.json' //trying to write via form to json app.post('/gettingdata', function(req, res) { var user_id = req.body.usrid; var token = req.body.usrphone; var geo = req.body.usrdata; //start writing var obj = { name: user_id , phone: token, adress: geo } jsonfile.writeFileSync(file, obj, {flag: 'a'}); //default //res.send(user_id + ' ' + token + ' ' + geo); }); 

html –

 <body> <form action="/gettingdata" method="post"> Name:<input type="text" name="usrid" /><br> Phone:<input type="text" name="usrphone" /><br> RData:<input type=="text" name="usrdata" /><br> <input type="submit" value="Submit" > </form> </body> 

json出现as-

 {"name":"name1","phone":"8989898989","adress":"random1"} {"name":"name1","phone":"767656568","adress":"randomdata1"} {"name":"name1","phone":"767656568","adress":"randomdata1"} 

对象之间没有逗号,也没有方括号。 我需要他们能够使parsing成为可能,以便我可以dynamic编辑和删除我的前端数据。 build议任何链接,方法或npm包这样做。如果问题重复也分享链接

我将用一些代码扩展Shil的答案:

 // 1. Read the existing file fs.readFile(file, (err, data) => { if (err && err.code === "ENOENT") { // But the file might not yet exist. If so, just write the object and bail return fs.writeFile(file, JSON.stringify([obj]), error => console.error); } else if (err) { // Some other error console.error(err); } // 2. Otherwise, get its JSON content else { try { const fileData = JSON.parse(data); // 3. Append the object you want fileData.push(obj); //4. Write the file back out return fs.writeFile(file, JSON.stringify(fileData), error => console.error) } catch(exception) { console.error(exception); } } }); 

这仅仅是一个快速的说明性的例子:随着文件的增长,效率低下,因为它每次都要读写整个文件。

请注意,这将创build一个包含对象数组的文件,这就是您如何在JSON中创build对象列表。 所以你的最终输出将如下所示:

 [ {"name":"name1","phone":"8989898989","adress":"random1"}, {"name":"name1","phone":"767656568","adress":"randomdata1"}, {"name":"name1","phone":"767656568","adress":"randomdata1"} ] 

似乎你正在使用的图书馆不能做那件事。 在这两种方法中,我发现这个:

  var str = JSON.stringify(obj, options.replacer, spaces) + '\n' //not sure if fs.writeFileSync returns anything, but just in case return fs.writeFileSync(file, str, options) 

在那里它将刚刚传递给函数的string写入文件,所以它不会评估它已经写入文件的内容。 所以每次调用函数时都会写一个json 。 它不会继续向现有的json添加元素。 你应该做一个自定义函数来做到这一点。

你可以这样做:

  1. 回顾它已经在文件中的内容
  2. parsing成json
  3. 追加你想添加的json对象
  4. 对结果进行string化并将其保存到文件中,replace先写入的内容。

编辑:

来源: writeFile / writeFileSync