如何访问JSON数组中的所有值?

时间:2018-02-12 14:45:02

标签: arrays json react-native

我现在可以访问的唯一数据是数组的开头部分:

[
    {
        /*start*/
        "username" : "Bob",
        "password":"123456",
        "bio":"Hi",
        /*End*/
        "data":
        [
            {
                "pet" : "dog",
                "age" : "20",
                "city" : "5"
            },
            {
                "pet" : "cat",
                "age" : "18",
                "city" : "7"
            }
        ]
    }
]

我也可以访问data数组的一部分,但我正在尝试访问所有这些数组。例如:{item.data[1].pet}。我尝试使用for循环但是没有成功。我也在使用react-native平面列表,dataSource: responseJSON.data也没有为我工作。我确定必须有办法访问pet的所有值,而不是每次只访问一个,我只是不知道如何。

此外,由于我是初学者,任何提示都将很高兴。

编辑:尝试从JSX外部循环:

 var itemList = [];

for (var i = 0; i < responseJSON[0].data.length; i++) { itemList.push(<Text> {responseJson[0].data[i].pet}</Text>); }

我把它从render()中取出然后我拿itemList并坚持下去:

<FlatList

          data={ this.state.dataSource}

          ItemSeparatorComponent = {this.FlatListItemSeparator}


          renderItem={({item}) => <View>

          {itemList}
          </View>
             }

          keyExtractor={(item, index) => index}

     />

现在它不理解itemList是一个变量。我收到语法错误。

编辑2:感谢大家我唯一需要帮助的是在React Native中将变量放在componentDidMount内。

4 个答案:

答案 0 :(得分:1)

你可以在javascript中这样做:

var json = {"data":[{"pet":"dog","age":"20","city":"5"},{"pet":"cat","age":"18","city":"7"}]};


for (var i = 0; i < json.data.length; i++) {
  var object = json.data[i];
  console.log(object);
  console.log(object.pet, object.age, object.city);
}

答案 1 :(得分:1)

我对React没有任何经验,但从我发现的情况来看,似乎应该这样做:

const responseJson = [
    {
        /*start*/
        "username" : "Bob",
        "password":"123456",
        "bio":"Hi",
        /*End*/
        "data":
        [
            {
                "pet" : "dog",
                "age" : "20",
                "city" : "5"
            },
            {
                "pet" : "cat",
                "age" : "18",
                "city" : "7"
            }
        ]
    }
];


const listItems = responseJson[0].data.map((details) =>
  <li>{details.pet}</li>
);

ReactDOM.render(
  <ul>{listItems}</ul>,
  document.getElementById('root')
);

我得到的输出是:

  
      
  •   
  •   

答案 2 :(得分:0)

试试这个循环:

for (var i = 0; i < responseJSON[0].data.length; i++) { 
    alert(responseJSON[0].data[i].pet);
}

这里的工作示例:

https://plnkr.co/edit/c1sZYKrBWHFJOKwHEMbU?p=preview

答案 3 :(得分:-1)

为什么不使用 Lodash 库将responseJson中的所有数据转换为对象,然后从中获取数据对象并将其分配给变量,然后将其转换回阵列。之后,您将数据源更改为您获得的数组

请参阅Lodash的文档here