如何在 React JS (axios) 中从 json 中提取一些数据?

How to extract some data from json in react JS (axios)?

我是 ReactJS 和 axios 新手。

如果键是数字(如 0、1、2....),我想迭代并提取 json 数据 并且不知道如何编写这段代码。 (因为服务器动态提供了json,我们不知道它会有多少个元素)

现在我可以使用 key = 0 提取数据(假设存在这个元素)

class ContentBody extends Component {
    constructor(props) {
        super(props);
        this.state = {
            jdata: []
        }
    }
    componentDidMount() {
        var self = this;
        // read data periodically
        setInterval(function() {
            axios.get(URL)
                .then(function(response) {
                    self.setState({
                        jdata: response.data[0].Name
                    });
                })
                .catch(function(e) {
                    console.log("ERROR ", e);
                })
        }, 1000);
    }
}

// below is json data from the server
{
  "0": {
    "Assigned": false, 
    "Name": "BebopDrone-Test001.", 
    "droneID": 0
  }, 
  "1": {
    "Assigned": false, 
    "Name": "BebopDrone-B046836", 
    "droneID": 1
  }, 
  "2": {
    "Assigned": false, 
    "Name": "BebopDrone-Test002.", 
    "droneID": 2
  }, 
  "function": "getAllDroneStatus()"
}


// my pseudo code might be 
for(int i = 0; i < jsonObject.size(); i++){
    if(key is number){
        extract corresponding value
    }
 }

您的响应是对象而不是数组。

您不能使用数组索引访问对象。

假设 response.data 是您 json 的主体,您应该像这样访问您的对象属性:response.data['0'], response.data['1'], response.data['2']

您可以使用 for..in 遍历对象。

您的数据模型(除了对 'getAllDroneStatus()' 的引用)表明数组可能更有用。

{
   "jdata" : [
      {
         "Assigned": false, 
         "Name": "BebopDrone-Test001.", 
         "droneID": 0
      }
    // ... 
    ]
}

然后你可以迭代,减少,过滤等等。

你从服务器得到的响应是一个对象,你应该做的是遍历这个对象,然后在我假设你只需要名字的状态下更新数据

componentDidMount() {
    var self = this;
    // read data periodically
    setInterval(function() {
        axios.get(URL)
            .then(function(response) {
                var names=[];
                Object.keys(response.data).forEach(function(data) {
                     names.push(data.Name);
                })
                self.setState({
                    jdata: names
                });
            })
            .catch(function(e) {
                console.log("ERROR ", e);
            })
    }, 1000);
}