我有一些数据我正在尝试输出到输出文本文件。这就是我试图这样做的方式:
'use strict';
var fs = require('fs');
let id = require('./ID.json');
let obj = require('./dataOut.json');
let isp = require('./isp');
let dst = require('./dst');
let dst_lat = require('./dst_lat');
let dst_lng = require('./dst_lng');
const output = [];
let i = 0;
obj.forEach(block => {
let outputOut =
' {\n',
' "_id": ' + '"' + id[i] + '",\n',
' "latlng": [\n',
' ' + dst_lat[i] + ',\n',
' ' + dst_lng[i] + '\n',
' ],\n',
' "name":' + '"' + isp[i] + '",\n',
' "address":' + '"' + dst[i] + '"\n',
'},\n';
output.push(outputOut);
i++;
});
fs.writeFile('./output.json');
我希望数据能够准确显示它在变量 outputOut 中的显示方式,但是,当我运行此代码时,我会遇到错误意外字符串。
我理解为什么我遇到这个错误,但我想不出解决它的方法。
如何将 outputOut 数据保存到文本文件?
答案 0 :(得分:2)
你可能会误解JSON.stringify
。它需要一个javascript对象或一个有效的JSON对象,并返回它的字符串版本。你的字符串连接是不必要的。其次,您实际上是错误地连接outputOut
。如此完成连接:var saying = "Hello" + "World";
尝试构建一个对象:
'use strict';
const fs = require('fs');
const id = require('./ID.json');
const obj = require('./dataOut.json');
const isp = require('./isp');
const dst = require('./dst');
const dst_lat = require('./dst_lat');
const dst_lng = require('./dst_lng');
const output = [];
let i = 0;
obj.forEach(block => {
let outputOut = {
"_id": id[i],
"latlng": [
dst_lat[i],
dst_lng[i],
],
"name": isp[i],
"address": dst[i],
}
output.push(outputOut);
i++;
});
fs.writeFile('./output.json', JSON.stringify(output, null, 2), 'utf-8');
这种方法更加惯用和简单。此外,它更容易阅读。让JavaScript为您做繁重的工作,而不是编写复杂的代码,这些代码仍可能以相当高的成本获得相同的结果。
最后,更实用的方法是使用Array.prototype.map
:
'use strict';
const fs = require('fs');
const id = require('./ID.json');
const obj = require('./dataOut.json');
const isp = require('./isp');
const dst = require('./dst');
const dst_lat = require('./dst_lat');
const dst_lng = require('./dst_lng');
const output = obj.map((block, i) => {
return {
"_id": id[i],
"latlng": [
dst_lat[i],
dst_lng[i],
],
"name": isp[i],
"address": dst[i],
};
});
fs.writeFile('./output.json', JSON.stringify(output, null, 2), 'utf-8');
这种方法避免了在每次迭代时改变output
以及利用回调函数中的索引而不是递增计数器var的需要。
答案 1 :(得分:1)
我看到你试图自己创建一个JSON文本。问题是你没有连接字符串部分,但是使用了逗号表达式(并没有把它放在括号中。如果你这样做,它仍然会有缺陷,因为逗号表达式不会连接字符串,但保留最后一个)。
要记住一件事:不要尝试创建自己的JSON表单字符串。人们已经为你做了。您所要做的就是正确映射这些对象,并调用JSON.stringify
:
'use strict';
var fs = require('fs');
let id = require('./ID.json');
let obj = require('./dataOut.json');
let isp = require('./isp');
let dst = require('./dst');
let dst_lat = require('./dst_lat');
let dst_lng = require('./dst_lng');
const output = obj.map((block, i) => {
return {
_id: id[i],
latlng: [
dst_lat[i],
dst_lng[i]
],
name: isp[i],
address: dst[i]
};
});
fs.writeFile('./output.json', JSON.stringify(output, null, 2), 'utf-8');
答案 2 :(得分:1)
除了您使用的错误方法,如果您想在javascript中连接字符串,则需要使用+
,而不是,
let outputOut =
' {\n' +
' "_id": ' + '"' + id[i] + '",\n' +
' "latlng": [\n' +
' ' + dst_lat[i] + ',\n' +
' ' + dst_lng[i] + '\n' +
' ],\n' +
' "name":' + '"' + isp[i] + '",\n' +
' "address":' + '"' + dst[i] + '"\n' +
'},\n';
output.push(outputOut);
这就是你的错误来自哪里。
已发布的其他答案将向您显示正确的做法