在 React 中导入 JSON 文件

IT技术 javascript json reactjs
2021-01-20 17:10:14

我是 React 的新手,我正在尝试DATA从外部文件导入 JSON变量。我收到以下错误:

找不到module“./customData.json”

有人可以帮助我吗?如果我有我的DATA变量,index.js但当它在外部 JSON 文件中时,它会起作用

索引.js
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import customData from './customData.json';
import Profile from './components/profile';
import Hobbies from './components/hobbies';

class App extends Component {
  render() {
    return (
      <div>
        <Profile name={this.props.profileData.name}imgUrl={this.props.profileData.imgURL} />
        <Hobbies hobbyList={this.props.profileData.hobbyList}/>
      </div>
    );
  }
}

ReactDOM.render(<App profileData={DATA}/>, document.querySelector('.container'));
爱好.js
import React, {Component} from 'react';

var Hobbies = React.createClass({
  render: function(){
    var hobbies = this.props.hobbyList.map(function(hobby, index){
        return (<li key={index}>{hobby}</li>);
    });
    return (
        <div>
            <h5>My hobbies:</h5>
            <ul>
                {hobbies}
            </ul>
        </div>
    );
  } 
});

export default Hobbies;
配置文件.js
import React from 'react';

var Profile = React.createClass({
render: function(){
    return (
        <div>
            <h3>{this.props.name}</h3>
            <img src={this.props.imgUrl} />
        </div>
    )
  }
});

export default Profile
自定义数据.json
var DATA = {    
    name: 'John Smith',
    imgURL: 'http://lorempixel.com/100/100/',
    hobbyList: ['coding', 'writing', 'skiing']
}

export default DATA
6个回答

一种不错的方法(不添加用于代码而不是用于数据和配置的假 .js 扩展名)是使用json-loadermodule。如果你曾经create-react-app搭建过你的项目,module已经包含在内,你只需要导入你的json:

import Profile from './components/profile';

这个答案解释了更多。

奇怪的。当我尝试在 中导入 json 文件时create-react-app,它返回undefined
2021-04-08 17:10:14
仅供参考,这有效。除了我有一个边缘情况,其中 json 文件的名称中不能有下划线。/profile.json可以,但/my_profile.json不是。
2021-04-10 17:10:14
恕我直言,这个其他答案应该是真正被接受的答案。这确实是一个解决方案,但仅适用于 React 应用程序的一个子集——只有那些以 create-react-app 开头的应用程序。
2021-04-12 17:10:14

这个老栗子...

简而言之,您应该使用 require 并让节点将解析作为 require 调用的一部分进行处理,而不是将其外包给第 3 方module。您还应该注意您的配置是防弹的,这意味着您应该仔细检查返回的数据。

但为简洁起见,请考虑以下示例:

例如,假设我的应用程序根目录中有一个配置文件“admins.json”,其中包含以下内容:

admins.json
[{
  "userName": "tech1337",
  "passSalted": "xxxxxxxxxxxx"
}]

请注意引用的键"userName",,"passSalted"

我可以执行以下操作并轻松地从文件中获取数据。

let admins = require('~/app/admins.json');
console.log(admins[0].userName);

现在数据已经存在并且可以用作常规(或数组)对象。

正确格式化的 JSON 需要键周围的双引号。另外,JSON 不能有注释。
2021-03-28 17:10:14
绝对是正确答案。不需要第三方module来读取 JSON 数据。
2021-04-09 17:10:14

随着json-loader安装,您可以使用

import customData from '../customData.json';

或者,甚至更简单

import customData from '../customData';

安装 json-loader

npm install --save-dev json-loader

最简单的方法如下

// Save this as someJson.js
const someJson = {
  name: 'Name',
  age: 20
}

export default someJson

然后

import someJson from './someJson'
这是一个 JavaScript 对象而不是一个 JSON 对象
2021-03-15 17:10:14
这不是 JSON。
2021-03-28 17:10:14

请使用 .js 扩展名存储您的 JSON 文件,并确保您的 JSON 应位于同一目录中。

解决了 !!谢谢你的回答 !!
2021-03-31 17:10:14