如何访问json文件中的本地图像URL

时间:2018-08-09 00:07:07

标签: json react-native

我在访问json文件中的本地图像URL时遇到问题。以下是我尝试过的所有方法,但没有一个起作用。

// json
{
    "image": "./images/example.jpg",
}

// React Native
import data from './data.json';

const URL =  JSON.stringify(data.image)   
<Image source = {{uri: URL } style = {{ width: 98, height: 22 }} />    // Image not showing

const URL = data.image
<Image source = {{uri: URL } style = {{ width: 98, height: 22 }} />    // Image not showing

以上方法均未显示图片。

我也尝试了require:

// json
{
    "image": "example.jpg",
}

const item =  data.image   
<Image source = {require( './images/' +  item)} style = {{ width: 98, height: 22 }} />

const item =  JSON.stringify(data.image) 
<Image source = {require( './images/' +  item)} style = {{ width: 98, height: 22 }} />

上面显示了一个错误,仅要求使用字符串文字参数,这对我来说很奇怪,因为以下代码实际上可以正常工作。

const item = 'example.jpg'
<Image source = {require( './images/' +  item)} style = {{ width: 98, height: 22 }} />

我已经在互联网上搜索了好几个小时,却找不到解决方案。有人可以给我展示访问本地json数据的正确示例吗?非常感谢。

3 个答案:

答案 0 :(得分:0)

您不能在require中使用变量。所有要求都必须是静态可分析的。这意味着您总是必须编写require('/ path / to / file')。您可以尝试

const images = {
    profile: {
        profile: require('./profile/profile.png'),
        comments: require('./profile/comments.png'),
    },
    image1: require('./image1.jpg'),
    image2: require('./image2.jpg'),
};

export default images;
import Images from './img/index';

render() {
    <Image source={Images.profile.comments} />
}

您可以详细了解here

  

我们故意不支持动态生成的图像名称   因为这使得随着时间的推移很难管理资产,就像   你不想怎么做

     

var MyComponent = require('./'+ libName + typeOfComponent);

     

或类似的东西。像这样的动态图像名称生成   不适用于我们正在推出的新动态资产管理系统   通过它,您可以仅使用cmd + R即时添加和更新资产   (无需再添加到Xcode并重新编译)。

答案 1 :(得分:0)

JSON文件:

{
"id": 2,
"name": "Toyota Corolla XLI \\Hatchback Automatic",
"details": "4 seater, diesel",
"picture": "./static/images/XLI.jpg",
"overcharge": "PKR 179 per excess km",
"weekday": "PKR 190/hr",
"weekend": "PKR 287/hr",
"car_type": "SUV"

},

然后添加您的.js文件,如下所示:

{PostData.map((postDetail, index) => {
                return (
                  <Link href="details">
                    <Card className="carditem">
                      <Card.Body style={{ cursor: "pointer" }}>
                        <Row>
                          <Col xs="12" sm="4">
                            <img
                              src={postDetail.picture}
                              class="d-block"
                              height="170"
                            />

答案 2 :(得分:0)

将您的 json 保存在 .js 文件中,然后执行以下操作...

import avg from "./Components/Avenger-bg1.jpg";
import bts from "./Components/BTS-bg1.jpg";
import dis from "./Components/Disney-bg1.jpg";
import hp from "./Components/HP-bg1.jpg";
import crn from "./Components/BTS-bg1.jpg";
export const theme=[
  {
    "theme_name": "AVENGERS",
    "path": avg
  },
  {
    "theme_name": "BTS",
    "path": bts
  },
  {
    "theme_name": "DISNEY",
    "path": dis
  },
  {
    "theme_name": "HP",
    "path": hp
  },
  {
    "theme_name": "CROWN",
    "path": crn
  }
]

导入所需的所有图像路径并在 json 中分配这些变量 不是直接路径。