【问题标题】:Parse JSON file containing multiple objects解析包含多个对象的 JSON 文件
【发布时间】:2016-05-16 05:55:32
【问题描述】:

我有一个 JSON 文件,其中包含多个具有相同结构的对象,如下所示:

{
   "id": "123",
   "type": "alpha"
}
{
   "id": "321",
   "type": "beta"
}

我正在使用 node.js 来读取文件。

fs.readFile(__dirname + "/filename.json", 'utf8', function(err, data) {
var content = JSON.parse(JSON.stringify(data));

如果我做一个 console.log(content) 事情看起来不错。我看到了 json 文件的内容。我正在尝试迭代每个对象,但我不知道该怎么做。我试过使用

for(var doc in content)

但文档并不是我所期望的每个对象。如何遍历内容以获取 json 格式的每个对象以便解析它?

【问题讨论】:

  • 我不认为你的 JSON 语法很好,你确定它是真正的文件并且 JSON.parse 不会抛出任何错误吗?
  • 不是有效的 JSON,但它是一种常见的 JSON 流格式。
  • 这能回答你的问题吗? Sending/Parsing multiple JSON objects

标签: json node.js


【解决方案1】:

如果content是一个数组,可以使用

content.forEach(function (obj, index) { /* your code */ })

请参阅Array.prototype.forEach() 的文档

【讨论】:

    【解决方案2】:

    如果您只需要迭代,则可以使用 forEach 循环或正常的 for 循环:

    for(var i = 0; i<content.length(); i++){
    //perform whatever you need on the following object
    var myobject  = content[i];
    }
    

    【讨论】:

      【解决方案3】:

      取决于文件,当前的两个答案(Osama 和 Daniel)假设您有一个 JSON 数组:

      [
          {
              "id": "123",
              "type": "alpha"
          },
          {
              "id": "456",
              "type": "beta"
          }
      ]
      

      在这种情况下,您可以使用任何数组迭代器:

      var async = require('async'),
          content = require(__dirname + "/filename.json");
      async.each(content, function (item, callback) {
          //...
      });
      

      但在你的情况下,它似乎不是 JSON(没有括号来表示数组,也没有逗号来分隔对象),所以在JSON.parse 没有抛出任何错误的情况下,你需要隔离首先是你的对象:

      var fs = require('fs'),
          async = require('async');
      
      fs.readFile(__dirname + "/filename.notjson", 'utf8', function(err, data) {
          var content = data.split('}');
          async.map(content, function (item, callback) {
              callback(null, JSON.parse(item));
          }, function (err, content) {
              console.log(content);
          };
      });
      

      【讨论】:

      • 你不需要使用异步库来循环数组
      • @simon-p-r: 当然可以,但是来晚了,我不确定array.map/forEach 的正确语法,而使用异步我确定脚本是正常的,如果不是最佳的。
      • 这指向了我在阅读问题标题时所寻找的方向。不幸的是,搜索} 的解决方案对于大多数结构来说太基础了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多