循环遍历json数组列表

问题描述 投票:0回答:2

以下数组列表中,我需要一一获得所有价格。这将返回完整的json对象console.log('File data:', jsonString);,但是for循环似乎从未被调用,也从未输入。


[
  {
    "code": "ZC",
    "price": "1"
  },
  {
    "code": "ZS",
    "price": "3"
  },
  {
    "code": "VC",
    "price": "4"
  },
...]

    const jsonList = fs.readFile('../menu/list.json', 'utf8', (err, jsonString) => {
        if (err) {
            console.log("File read failed:", err)
            return
        }
        console.log('File data:', jsonString);
        return jsonString
    })
    for (var key in jsonList) {
        if (jsonList.hasOwnProperty(key)) {
            console.log('===>',jsonList[key].price); // This is never called 

         }
    }
node.js fs
2个回答
0
投票

我认为您需要在回调中循环,因为它是异步的,因此jsonList不是您访问它时期望的对象。参见Get data from fs.readFile


0
投票

有两种方法可以解决您面临的问题

一个是让您的代码在回调中运行:

const jsonList = fs.readFile("../menu/list.json", "utf8", (err, jsonString) => {
  if (err) {
    console.log("File read failed:", err);
    return;
  }
  console.log("File data:", jsonString);
  for (var key in jsonList) {
    if (jsonList.hasOwnProperty(key)) {
      console.log("===>", jsonList[key].price); // This is never called
    }
  }
});

或使用sync function to read file

const jsonString = fs.readFileSync("../menu/list.json", "utf8");
console.log("File data:", jsonString);
const jsonList = JSON.stringify(jsonString);
for (var key in jsonList) {
  if (jsonList.hasOwnProperty(key)) {
    console.log("===>", jsonList[key].price); // This is never called
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.