【问题标题】:How to parse/filter data from JSON file in Javascript如何在 Javascript 中解析/过滤来自 JSON 文件的数据
【发布时间】:2019-02-18 10:51:28
【问题描述】:

有没有办法在 Javascript 文件中解析/过滤 JSON 文件中存在的数据。

基本上,我将 JSON 文件调用到我的本地 javascript 中。我在读取特定数据和打印时遇到问题。

谁能帮忙。

JSON 文件包含:

{
    "Data": [
    {

    "name": "John",
    "age": 30
    },

    {
    "joined on":"Jan 2015",
    "working on": "Automation",
    }
]
}

我正在尝试将上述 JSON 文件读取为:

var jfile = require("./Example.json");

var test = JSON.parse(JSON.stringify(jfile))

console.log(test)

我得到这样的输出:

{ Data:
   [ { name: 'John', age: 30 },
     { 'joined on': 'Jan 2015', 'working on': 'Automation' } ] }

从上面,我有兴​​趣访问/过滤掉一个,即“名称”。我只想将值“John”打印到控制台。

我尝试对 JSON.parse 方法使用“.filter”方法,但它给我一个错误:

JSON.parse(...).filter is not a function

有没有办法执行这个活动?

【问题讨论】:

  • var test = JSON.parse(JSON.stringify(jfile)) — 为什么?!
  • @Quentin - 我对 JSON 很陌生,还在学习,在不同的地方看到过以这种方式使用它,因此我尝试实现相同的方法

标签: javascript node.js json


【解决方案1】:

你可以使用.点符号来访问它

var a = {
  "Data": [{

      "name": "John",
      "age": 30
    },

    {
      "joined on": "Jan 2015",
      "working on": "Automation",
    }
  ]
}
console.log(a.Data[0].name)

【讨论】:

  • 我有一个单独的 JSON 文件中的值,我试图在我的 javascript 文件中访问这些对象。点符号仍然有效吗?
【解决方案2】:

filter 是一个数组方法。

JSON.parse(...) 不会给你一个数组。它会给你一个带有Data 属性的对象。该属性的值是一个数组。

JSON.parse(...).Data.filter.

您不能只忽略部分数据结构。

【讨论】:

    【解决方案3】:

    如果您的不同形状数组中有多个项目,则可以使用此

    1. 使用json.Data 访问Data
    2. map 您的数组将其项目转换为 names
    3. 申请filter(Boolean)取出未定义者

    在你的情况下,你最终会得到一个只包含一个名字的数组 John

    const getName = json => json.Data.map(x => x.name).filter(Boolean);
    
    const json = {
      "Data": [{
    
          "name": "John",
          "age": 30
        },
    
        {
          "joined on": "Jan 2015",
          "working on": "Automation",
        }
      ]
    };
    
    console.log(getName(json));

    【讨论】:

      【解决方案4】:

      您的 JSON 的主要级别是一个对象(不是数组),只有数组有 .filter 方法。
      所以过滤Data键下的数组:

      var test = JSON.parse(JSON.stringify(jfile)).Data.filter(/*something*/);
      

      但最好不要重新解析 JSON:

      var test = jfile.Data.filter(/*something*/);
      

      【讨论】:

        【解决方案5】:

        正如Quentin 在他的评论中提到的,下面的语句有什么用?

        var test = JSON.parse(JSON.stringify(jfile))

        您可以直接从响应中访问name 属性。

        试试这个:

        var obj = {
        	"Data": [{
        
        			"name": "John",
        			"age": 30
        		},
        
        		{
        			"joined on": "Jan 2015",
        			"working on": "Automation"
        		}
        	]
        };
        
        // Solution 1
        console.log(obj.Data.map(item => item.name).filter(Boolean));
        
        // Solution 2
        console.log(obj.Data.filter(item => item.name).map(elem => elem.name));

        【讨论】:

        • 为什么要在变量中添加json?百万行的本地 json 文件如何加载并对其应用过滤器?
        • 在 OP 中,有一个小的 JSOn,这是我将它放在变量中的唯一原因。一切都与需求有关。
        猜你喜欢
        • 1970-01-01
        • 2018-07-07
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多