在 react-native 中迭代 JSON 数组

Posted

技术标签:

【中文标题】在 react-native 中迭代 JSON 数组【英文标题】:iterate over JSON array in react-native 【发布时间】:2018-03-23 22:47:15 【问题描述】:

我在使用 react native 时遇到了问题。我已经解析了一个 JSON 对象,需要遍历一个嵌套在其中的数组。我想在一个列表中获取所有 profiles 对象。

我尝试使用以下代码,但它没有获取配置文件对象。如何打印列表中的所有配置文件对象?

代码:

import React,  Component  from 'react';
import  AppRegistry, StyleSheet, Modal, Image, Platform  from 'react-native';
import  Spinner, Text, View, Content, Container,Item,Header,Body, Title, Button, Icon, InputGroup, Input, ListItem, List, Radio, CheckBox, Thumbnail, Card, CardItem, H3  from 'native-base';

 class Profile extends Component 
    constructor(props) 
        super(props);
        this.state = 
            radio1 : true,
            check1: false,
            modalVisible: false,
            search: 'nativebase',
            selectedItem: undefined,
            results: 
                items: []
            
        
    

    setModalVisible(visible, x) 
        this.setState(
            modalVisible: visible,
            selectedItem: x
        );
    

    toggleCheck() 
        this.setState(
            check1 : !this.state.check1
        )
    
    componentDidMount() 

        var that = this;
        this.search();

    

    search() 
        // Set loading to true when the search starts to display a Spinner
        this.setState(
            loading: true
        );

        var that = this;
        return fetch('https://mysite.in/api/profilematch/25/')
            .then((response) => response.json())
            .then((responseJson) => 
                // Store the results in the state variable results and set loading to 
                // false to remove the spinner and display the list of repositories
                that.setState(
                    results: responseJson,
                    loading: false
                );

                return responseJson;
            )
            .catch((error) => 

                that.setState(
                    loading: false
                );

                console.error(error);
        );
    

    render() 

        var that = this;
        return (
            <Container>
                <Content>
                <List>
                    this.state.loading? <Spinner /> : <List dataArray=this.state.results renderRow=(results) =>
                                <ListItem button onPress=()=>this.setModalVisible(true, item) >
                                    <Thumbnail square size=80 source=uri: results.avatar_url />
                                    <Text>Name: <Text style=fontWeight: '600', color: '#46ee4b'>results</Text></Text>
                                     <Body>
                                    <Text>results.sur_name</Text>

                                    </Body>
                                </ListItem>
                             />
                </List>
            </Content>
            </Container>
         );
     
 
const styles = StyleSheet.create(
    header : 
        marginLeft: -5,
        marginTop: 5,
        marginBottom: (Platform.OS==='ios') ? -7 : 0,
        lineHeight: 24,
        color: '#5357b6'
    ,
    modalImage: 
        resizeMode: 'contain',
        height: 200
    ,
    bold: 
        fontWeight: '600'
    ,
    negativeMargin: 
        marginBottom: -10
    
);

module.exports = Profile;

json:

[
    
        "id": 4,
        "profiles": [
            
                "id": 18,
                "first_name": "sweta",
                 "is_active": true

            ,
            
                "id": 20,
                "first_name": "Hiteshi",
                 "is_active": true
            ,
            
                "id": 3,
                "first_name": "Sneha",
                "is_active": true
            
        ],
        "user": 25
    
]

我要做的就是在列表中打印profiles 对象。

【问题讨论】:

responseJson[0].profiles 是您要迭代的数组 - 所以也许是 results: responseJson[0].profiles @JaromandaX 非常感谢。它的工作,你拯救了我的一天。 【参考方案1】:

在获取时添加另一个变量

that.setState(
   //assuming profiles exist
   profiles: responseJson[0].profiles,
);

创建列表视图

<ListView dataSource=this.state.profiles renderRow=this.renderRow.bind(this) />

显示数据

renderRow(rowData) 
   return (<Text>rowData.first_name</Text>);

我希望这对你有帮助。未经测试,但应该像这样工作。

【讨论】:

以上是关于在 react-native 中迭代 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

jq json将对象移动到嵌套对象并迭代未知名称/对象数

如何从 fetch 中获取 JSON 数据(react-native)

react-native 如何从本地JSON文件中获取数据?

迭代 JSON,快速

react-native - 图像需要来自 JSON 的本地路径

react-native fetch 返回状态码 + json