输出文本文件时出现意外字符串

Unexpected string when outputting textfile

本文关键字:意外 字符串 文本 文件 输出      更新时间:2023-09-26

我有一些数据,我试图输出到输出文本文件。这就是我要做的:

'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数据到一个文本文件?

您可能误解了JSON.stringify。它接受一个javascript对象或一个有效的JSON对象,并返回它的字符串版本。您的字符串连接是不必要的。其次,您实际上错误地连接了outputOutvar 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的需要,并且利用了回调函数中的索引,而不是增加计数器变量。

我看到您尝试自己创建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');

除了使用的错误方法之外,如果你想在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);

这就是你的错误的来源。

其他已经发布的答案会告诉你做你想做的事情的正确方法