【问题标题】:Looping through .json object循环 .json 对象
【发布时间】:2016-07-27 16:48:06
【问题描述】:

我有一个 .JSON 文件,其中包含类似以下的数据:

[
{
    "scan_type": "nexpose",
    "date_time": "2016-07-18 18:21:44",
    "source_address": "1111",
    "source_lat": "22.555260",
    "source_lng": "-15.084420",
},   
...
]

我写了一个脚本,将这些数据转换为一个对象,这是我的脚本:

let obj = require('./dataOut.json');
var fs = require('fs');

//json variables
let scan_type = obj[0].scan_type;
let date_time = obj[0].date_time;
let source_address = obj[0].source_address;
let source_lat = obj[0].source_lat;
let source_lng = obj[0].source_lng;

//source contains the new object
var source = {
    id: source_lat + source_lng,
    "source-lat": source_lat,
    "source-lng": source_lng,
    "source_address": source_address,
    x: {
        valueOf: function () {
            var latlng = [
                source_lat,
                source_lng
            ];
            var xy = map.FUNCTION_FOR_CONVERTING_LAT_LNG_TO_X_Y(latlng);
            return xy[0];
        }
    },
    y: {
        valueOf: function () {
            var latlng = [
                source_lat,
                source_lng
            ];
            var xy = map.FUNCTION_FOR_CONVERTING_LAT_LNG_TO_X_Y(latlng);
            return xy[1];
        }
    }
}
//write out to file and stringify
fs.writeFile('./parentSource.json', JSON.stringify(source, null, 2), 'utf-8');

如您所见,目前我已将所有内容设置为数据文件中的第一个元素 [0] 以进行测试。但我需要将其更改为循环遍历每个元素的位置。

通常我只会使用foreach 循环,但这并不成功。

如何添加一个循环遍历每个 .JSON 对象并将值添加到我的脚本中,以便我的输出文件包含所有新格式化的数据?

为了澄清,我想将结果作为结果写入一个数组,在一个文件输出中。

另外:我当前的代码工作得很好,但只适用于第一个元素[0],我只需要找到一种方法来遍历 .JSON 中的其余元素,并将它们包含在我的输出中

【问题讨论】:

  • 可以使用JSON.parse函数将JSON解析为JS Object。
  • destination 定义在哪里?
  • 您希望每个对象分别写入输出文件,还是作为 JSON 数组写入文件?你能澄清一下你想要达到的目标吗?
  • 通常我只会使用 foreach 循环,但没有成功。为什么?你尝试了什么?
  • @10100111001 除非我弄错了,否则let obj = require('./dataOut.json'); 已经在进行解析并将结果填充到objobj.forEach() 应该可以工作。

标签: javascript json node.js loops for-loop


【解决方案1】:

正如我在 cmets 中所说,尝试使用带有箭头功能的 forEach。像这样的:

let obj = require('./dataOut.json');
var fs = require('fs');

const source = [];

obj.forEach(o => {
  //json variables
  const scan_type = o.scan_type;
  const date_time = o.date_time;
  const source_address = o.source_address;
  const source_lat = o.source_lat;
  const source_lng = o.source_lng;

  //source contains the new object
  source.push({
    id: source_lat + source_lng,
    "source-lat": source_lat,
    "source-lng": source_lng,
    "source_address": source_address,
    x: {
      valueOf: function () {
        var latlng = [
          source_lat,
          source_lng
        ];
        var xy = map.FUNCTION_FOR_CONVERTING_LAT_LNG_TO_X_Y(latlng);
        return xy[0];
      }
    },
    y: {
      valueOf: function () {
        var latlng = [
          source_lat,
          source_lng
        ];
        var xy = map.FUNCTION_FOR_CONVERTING_LAT_LNG_TO_X_Y(latlng);
        return xy[1];
      }
    }
  });
});

//write out to file and stringify
fs.writeFile('./parentSource.json', JSON.stringify(source, null, 2), 'utf-8');

o 在每次迭代中都将成为您的 ./dataOut.json 文件中的数组项。

【讨论】:

  • 行得通!很好的解决方案,非常感谢。抱歉,我错过了您之前的评论。
  • 请注意,我将您的一些 varlet 关键字更改为 const。你应该阅读一些关于它们的信息,因为它可以更容易地理解代码并告诉解释器你想从每个成员那里得到什么:JavaScript ES6 Variable Declarations with let and const。干杯。
猜你喜欢
  • 2016-11-11
  • 1970-01-01
  • 2021-10-07
  • 2016-10-11
  • 2012-10-14
  • 2016-06-22
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多