如何解析React js中的本地JSON文件?

Par*_*ism 18 javascript json reactjs

如何通过JSON文件解析检索其所有数据并在我的代码中使用它?

我已经尝试导入该文件并尝试使用控制台记录它,但它只是打印对象{}:

import jsonData from "./file.json";
console.log(jsonData);
Run Code Online (Sandbox Code Playgroud)

这是我的file.json看起来像:

[
    {
      "id": 1,
      "gender": "Female",
      "first_name": "Helen",
      "last_name": "Nguyen",
      "email": "hnguyen0@bloomberg.com",
      "ip_address": "227.211.25.18"
    }, {
      "id": 2,
      "gender": "Male",
      "first_name": "Carlos",
      "last_name": "Fowler",
      "email": "cfowler1@gnu.org",
      "ip_address": "214.248.201.11"
    }
]
Run Code Online (Sandbox Code Playgroud)

我希望能够访问每个组件的名字和姓氏,并在网站上打印.

fuz*_*uzz 23

var data = require('../../file.json'); // forward slashes will depend on the file location
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/c9wupvo6/

  • 我收到此错误:“未捕获错误:找不到模块“json!./Sections/file.json””,即使这是正确的路径。 (2认同)
  • 是的,它在没有““ json!” (2认同)

eri*_*2k8 11

使用 webpack 2.0.0+ 打包的应用程序(例如使用create-react-app 创建的应用程序)完全按照问题支持从 json 导入(请参阅此答案.

请注意import缓存结果,即使该结果被解析为 json,因此如果您修改该对象,其他导入它的模块也会引用同一个对象,而不是新解析的副本。

要获得“干净”的副本,您可以创建一个克隆它的函数,例如:

import jsonData from './file.json';

const loadData = () => JSON.parse(JSON.stringify(jsonData));
Run Code Online (Sandbox Code Playgroud)

或者,如果您正在使用lodash

import jsonData from './file.json';
import { cloneDeep } from 'lodash';

const loadData = () => cloneDeep(jsonData);
Run Code Online (Sandbox Code Playgroud)


pat*_*tad 5

我也遇到了一个空的Object回来的问题.即使require按照上面的建议使用.

fetch 然而解决了我的问题:

fetch('./data/fakeData.json')
  .then((res) => res.json())
  .then((data) => {
    console.log('data:', data);
  })
Run Code Online (Sandbox Code Playgroud)

(截至今天,支持不是最佳的:http://caniuse.com/#feat=fetch)

  • 这似乎应该有效.但每当我尝试它时,我得到"localhost /:1 Uncaught(在promise中)SyntaxError:在位置0的JSON中出现意外的令牌" (22认同)
  • @社区我找到了解决方案!您需要传递完整路径(在项目内部),而不是传递相对路径,例如 `fetch("src/data/fakeData.json)`。不要使用 `res.json()`,而是使用 `res.json()`。 text()`,并且在最后一个 then 使用 `JSON.parse(data)` (2认同)