在JSON React-Native中访问数组内部的数组
-
尝试通过读取JSON数据执行自动完成建议.
Trying to perform autocomplete suggestion by reading JSON data.
JSON数据的格式为:
The format of JSON data is:
locations:
[
{
"Companyname": "pqr",
"TopfiveproductsList": [
{
"prodId": "16",
"prodName": "abc"
},
{
"prodId": "17",
"prodName": "xyz"
}
],
"companycode": "C1"
},
{
"Companyname": "zzz",
"TopfiveproductsList": [
{
"prodId": "12",
"prodName": "yyy"
},
{
"prodId": "14",
"prodName": "lmn"
},
{
"prodId": "32",
"prodName": "qaq"
}
],
"companycode": "C2"
}
]
显示companyname
数组中的companyname
及其对应的TopfiveproductsList
数组记录.
在下面的代码中,显示代码companyname
,但不显示其对应的TopfiveproductsList.prodName
.
Displaying companyname
from locations
array and its corresponding records of TopfiveproductsList
array.
In below code companyname
is displayed but its corresponding TopfiveproductsList.prodName
are not displayed.
访问prodName
会给出错误JSON parse error: Unexpected identifier object
.
<Autocomplete
autoCapitalize="none"
autoCorrect={false}
data={locations}
defaultValue={query}
onChangeText={text => this.setState({ query: text })}
renderItem={({ Companyname, TopfiveproductsList.prodName }) => (
<Text>{Companyname} {TopfiveproductsList.prodName}</Text )}
/>
index.android.js
import Sample from './sample.json';
export default class pre extends Component {
constructor(props) {
super(props);
this.state = {
locations: [],
query: '',
};
}
loadData() {
this.setState({ locations : Sample });
}
findLocation(query) {
this.loadData();
const { locations } = this.state;
const regex = new RegExp(`${query.trim()}`, 'i');
return locations.filter(location => location.Companyname.search(regex) >= 0);
}
render() {
const { query } = this.state;
const locations = this.findLocation(query);
return (
<View>
<Autocomplete
autoCapitalize="none"
autoCorrect={false}
data={locations}
defaultValue={query}
onChangeText={text => this.setState({ query: text })}
renderItem={({ Companyname }) => (
<Text> {Companyname} </Text> )}
/>
</View>
);
}
}
TopfiveproductsList是一个对象数组,您不能仅仅执行TopfiveproductsList.prodName来获取所需的内容.看来您需要使用字符串数组,因此必须自己构建:
TopfiveproductsList is an array of objects, you can't just do TopfiveproductsList.prodName to get what you need. It looks like you need to use an array of strings so you would have to build it yourself:
<Autocomplete
autoCapitalize="none"
autoCorrect={false}
data={locations}
defaultValue={query}
onChangeText={text => this.setState({ query: text })}
renderItem={({ Companyname, TopfiveproductsList }) => {
const prodNames = TopfiveproductsList.map(item => item.prodNames);
return <Text>{Companyname} {prodNames}</Text }}
/>