Проблема с получением данных Json из вызова API

Мне было интересно, как получить данные json в массиве массивов.

Я хочу иметь возможность выбирать группы на основе group_id и перечислять всех пользователей в этом group_id, а также все их учетные данные. Вот как выглядит структура данных json:

{
  "groups": [
    {
      "group_id": 736,
      "members": [
        {
          "user_id": 1,
          "email": "[email protected]",
          "first_name": "John",
          "last_name": "Doe"
        },
        {
          "user_id": 14,
          "email": "[email protected]",
          "first_name": "Be",
          "last_name": "Hg"
        },
        {
          "user_id": 10,
          "email": "[email protected]",
          "first_name": "Sugar",
          "last_name": "Tea"
        }
      ]
    },
    {
      "group_id": 737,
      "members": [
        {
          "user_id": 3,
          "email": "[email protected]",
          "first_name": "Kent",
          "last_name": "Torrel"
        },
        {
          "user_id": 12,
          "email": "Chh",
          "first_name": "Dog",
          "last_name": "Go"
        },
        {
          "user_id": 15,
          "email": "",
          "first_name": "",
          "last_name": ""
        }
      ]
    },
    {
      "group_id": 738,
      "members": [
        {
          "user_id": 6,
          "email": "[email protected]",
          "first_name": "Raj",
          "last_name": "Parikh"
        },
        {
          "user_id": 2,
          "email": "[email protected]",
          "first_name": "Vathana",
          "last_name": "Him"
        },
        {
          "user_id": 11,
          "email": "[email protected]",
          "first_name": "Sugar",
          "last_name": "Tea"
        }
      ]
    },
    {
      "group_id": 739,
      "members": [
        {
          "user_id": 13,
          "email": "Hdh",
          "first_name": "Ou",
          "last_name": "Hm"
        },
        {
          "user_id": 9,
          "email": "[email protected]",
          "first_name": "Larry",
          "last_name": "Jones"
        },
        {
          "user_id": 4,
          "email": "[email protected]",
          "first_name": "Megan",
          "last_name": "Cruz"
        }
      ]
    },
    {
      "group_id": 740,
      "members": [
        {
          "user_id": 8,
          "email": "[email protected]",
          "first_name": "Jajsdjao",
          "last_name": "Doe"
        },
        {
          "user_id": 16,
          "email": "",
          "first_name": "",
          "last_name": ""
        },
        {
          "user_id": 5,
          "email": "[email protected]",
          "first_name": "Liron",
          "last_name": "Benjamin"
        }
      ]
    }
  ]
}

Пока это то, что у меня есть, но это только тянет пользователя group_id в первом индексе. Я пробовал использовать "item.members.user_id", но ничего не появляется.

constructor(props) {
          super(props);
          this.state = {
            isLoading: false,
          dataSource: null,
      }
    }

      componentDidMount(){
          return fetch('https://strengthn-backend.herokuapp.com/activeGroups')
          .then((response) => response.json())
          .then((responseJson) => {
              this.setState({
                  isLoading: false,
                  dataSource: responseJson.groups,
              })
          })
          .catch((error) => {
              console.error(error);
          });
      }

 addPerson() {

        if (this.state.isLoading) {

            return (
            <List>
            {console.info(this.state.dataSource)}
             <FlatList
            data = {this.state.dataSource}
            renderItem = {({item})=> (
            <Text>{item.members[0].user_id}</Text> 
            )}
            />  
            </List>

        )
    }  
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Цикл for необходим, иначе он будет получать только первые данные. Попробуйте это:

export default class Test extends React.Component{
  constructor(){
    super();
    this.state  = {
      dataSource:'',
    }
  }

  componentDidMount(){
    this.fetchAPI()
  }

fetchAPI= async() => {
  let that= this;
  await fetch('https://strengthn-backend.herokuapp.com/activeGroups')
    .then(response => response.json())
    .then(response => {
      that.setState({ dataSource: response.groups})
    }).catch((error) => {
      Alert.alert("Error")
      return;
    })

    // console.warn("mana", this.state.dataSource);
  }


  _renderItem = ({item}) => {
    let temp = []

    for(var i=0; i < item.members.length; i++){

      temp.push(
        <View>
          <Text>{item.members[i].first_name} </Text>
          <Text>{item.members[i].last_name}</Text>
        </View>
      )
    }
    return temp
  }

  render(){
    return(
      <View>
        <FlatList
            data = {this.state.dataSource}
            renderItem= {this._renderItem}
            />
      </View>
    )
  }
}

Надеюсь, поможет!

Другие вопросы по теме