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

时间:2016-08-23 15:41:04

标签: javascript arrays json node.js

我有一些数据我正在尝试输出到输出文本文件。这就是我试图这样做的方式:

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

3 个答案:

答案 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);

这就是你的错误来自哪里。

已发布的其他答案将向您显示正确的做法