【问题标题】:How to loop through newline separated json line by line in JavaScript?如何在JavaScript中逐行循环换行分隔的json?
【发布时间】:2017-07-31 04:07:30
【问题描述】:

我的项目中有一个 JSON 文件,如下所示:

{"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}}
{"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}}
{"_id":1283378,"name":"Gorkhā","country":"NP","coord":{"lon":84.633331,"lat":28}}

我不确定如何循环遍历每一行以将其放入数组中。我该怎么做?

【问题讨论】:

  • 你能打开文件并读入吗?
  • 所以你想把一个无效的结构变成一个对象数组。加载文件,拆分新行,用逗号连接,用[] 换行,然后 JSON.parse 它。或修复它,使其有效启动而不必处理。
  • @epascarello 将一种格式封装在另一种格式中很常见。行分隔的 JSON 流非常常见。这可能是处理 JSON 对象流的最好、最直接的方法。您是否愿意拥有一个无限大小的永无止境的数组并将数据永远缓冲到内存中?您宁愿破解解析器还是实现流解析器?只要您知道自己在做什么并且有一个好的用例,用行分隔的 JSON 就没有什么问题。
  • @Brad 听起来如果 OP 在数组中需要它,这不是一个好的用例。 ;)
  • 您需要某种方式将其解析为 javascript 对象。如果您使用的是类似节点的后端,请尝试使用 fs 如果您在浏览器中使用 javascript,则必须使用一些 ajax 请求。

标签: javascript arrays json


【解决方案1】:

正确使用地图怎么样?

var myVar = `{"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}}
{"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}}
{"_id":1283378,"name":"Gorkhā","country":"NP","coord":{"lon":84.633331,"lat":28}}`;

var myArray = myVar.split('\n').map(JSON.parse);
console.log(myArray);

【讨论】:

  • 上面使用地图的那个,实际上是创建一个新数组,将数组复制到地图之外,然后返回那个数组。它破坏了地图的全部目的,因为地图存在是因为它返回了更改的数据。如果不使用返回的数据,则应使用 forEach 或 for 循环。
  • 关于使用连接的那个,它可能更优化,因为它一次性解析 json 而不是每个元素。我的帖子主要是警告地图使用不当。
【解决方案2】:

试试下面的代码:

var myVar = `{"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}}
{"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}}
{"_id":1283378,"name":"Gorkhā","country":"NP","coord":{"lon":84.633331,"lat":28}}`;

var myArray = [];
myVar.split('\n').map(function (value) {
  myArray.push(JSON.parse(value));
});
console.log(myArray);

【讨论】:

    【解决方案3】:

    在新行上拆分,用逗号连接,用括号括起来,然后解析它。

    var str = `{"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}}
    {"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}}
    {"_id":1283378,"name":"Gorkhā","country":"NP","coord":{"lon":84.633331,"lat":28}}`
    
    var lines = str.split(/\n/);
    var wrapped = "[" + lines.join(",") + "]";
    var obj = JSON.parse(wrapped);
    
    console.log(obj);

    更好的解决方案,修复任何为您提供该格式的内容,以便为您提供正确的结构。

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2018-04-03
      • 2018-12-20
      相关资源
      最近更新 更多