提问者:小点点

将Json对象转换为nodejs中的数组


 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的照片搜索失败。如何去除这个?我相信如果这个被移除,搜索和返回照片将会起作用


共2个答案

匿名用户

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

正确的代码:

null

(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");

匿名用户

奇怪的是,您使用json.stringify()将这个带有照片的对象转换回字符串,然后将该字符串添加到数组中。请看下面我的建议。

null

const existingArrayOfPhotos = [];

yamlString = `Photos:
      - id: Photo1
        Type: Color
        Shade: Grey
      - id: Photo2
        Type: Color
        Shade: Red`
        
const photoData = YAML.parse(yamlString);
existingArrayOfPhotos.push(...photoData.Photos)
const foundPhoto = existingArrayOfPhotos.find((photo) => photo.id == "Photo1");

console.log(foundPhoto);
<script src="https://cdnjs.cloudflare.com/ajax/libs/yamljs/0.3.0/yaml.min.js"></script>