首页 > 解决方案 > 在nodejs中将Json对象转换为数组

问题描述

 Photos:
      - id: Photo1
        Type: Color
        Shade: Grey
      - id: Photo2
        Type: Color
        Shade: Red

这里将上述 yaml 文件转换为 JSON 对象并尝试根据 id 查找照片:

const raw = fs.readFileSync("Photos.yaml", 'utf8');
const PhotoData= YAML.load(raw);

export const getSpecificPhoto = (req,res)=>{
    const { id } = req.params;
    let photoArray = []; //photoArray
    let getPhoto = JSON.stringify(PhotoData);  //Converting to JSON string

    photoArray.push(getPhoto); //Pushing to arrayv so that search can be done
    console.log(photoArray);
    const foundPhoto = photoArray.find((photo) => photo.id == id);

    console.log(foundPhoto );
}

在 上获得以下结果:

console.log(photoArray) => {"Photos":[{"id":"Photo1","Type":"Color","Shade":"Grey"},{"id":"Photo2","Type":"Color","Shade":"Red"}]}

console.log(foundPhoto) => undefined

问题:我怀疑获取“照片”:console.log(photoArray) 的结果导致我基于 id 搜索照片失败。如何删除这个?我相信如果这被删除搜索和返回照片将起作用

标签: javascriptnode.jsyaml

解决方案


您的数据是 insodePhotos对象,然后您推入一个空数组。所以当你从数组中查找时,你需要从正确的位置获取它。

正确代码:

(function test(id) {
let PhotoData = "{\"Photos\":[{\"id\":\"Photo1\", \"Type\": \"Color\", \"Shade\": \"Grey\"}, {\"id\": \"Photo2\", \"Type\": \"Color\", \"Shade\": \"Red\"}]}"
let photoArray = []; //photoArray
let getPhoto = JSON.parse(PhotoData);  //Converting to JSON object
console.log(getPhoto);
photoArray.push(getPhoto); //Pushing to arrayv so that search can be done
console.log(photoArray);
const foundPhoto = photoArray[0].Photos.find((photo) => photo.id == id);

console.log(foundPhoto );
})("Photo1");

结果:

{id: "Photo1", Type: "Color", Shade: "Grey"}

推荐阅读