Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从嵌套的json对象中检索值_Javascript_Json_Filter_Lodash - Fatal编程技术网

Javascript 从嵌套的json对象中检索值

Javascript 从嵌套的json对象中检索值,javascript,json,filter,lodash,Javascript,Json,Filter,Lodash,我有以下json对象: { "name": "Cairo", "title": "Lots to do in cairo", "categories": ["travel", "holiday"], "image": [ { "thumbnail": { "src": "/images/thumbnail/cairo.jpg", "height": 27, "width": 60 } },

我有以下json对象:

{
  "name": "Cairo",
  "title": "Lots to do in cairo",
  "categories": ["travel", "holiday"],
  "image": [
    {
      "thumbnail": {
        "src": "/images/thumbnail/cairo.jpg",
        "height": 27,
        "width": 60
      }
    },
    {
      "mobile": {
        "src": "/images/mobile/cairo.jpg",
        "height": 106,
        "width": 236
      }
    },
    {
      "original": {
        "src": "/images/original/cairo.jpg",
        "height": 866,
        "width": 1920
      }
    }
  ]
}
我试图使用jquery/lodash/javascript访问这个特定对象的“原始”图像的“src”值

我可以使用以下命令输出值:

var originalSrc = _.result(obj, 'image[2].original.src');
问题是我必须对[2]进行硬编码,但是这个json响应中图像变量的顺序没有固定,因此下次它可能会返回“mobile”src

有人对此有什么解决方案/想法吗

谢谢


Ashil

JSON的布局很糟糕(正如上面的评论所指出的),但是如果您不能更改它,那么这一行应该可以:

obj.image.filter(函数(x){return Object.keys(x)[0]='original'})[0]。original.src

可以尝试以下操作:

var json={
“姓名”:“开罗”,
“标题”:“开罗有很多事情要做”,
“类别”:[“旅行”、“假日”],
“图像”:[
{
“缩略图”:{
“src”:“/images/thumbnail/cairo.jpg”,
“高度”:27,
“宽度”:60
}
},
{
“移动”:{
“src”:“/images/mobile/cairo.jpg”,
“高度”:106,
“宽度”:236
}
},
{
“原件”:{
“src”:“/images/original/cairo.jpg”,
“高度”:866,
“宽度”:1920
}
}
]
}
var desiredObject=json.image.filter(函数(图像){return Object.keys(图像)[0]=“original”;})[0]
console.log(desiredObject);

log(desiredObject.original.src)您可以尝试通过多个步骤实现解决方案

  • 获取对象属性,在您的情况下,
    缩略图、移动、原始
    是图像对象中数组内对象的属性。
    Object.keys(objJSON.image)
    检索数组中的所有属性,在这种情况下,由于它是一个数组,因此结果将是
    [0,1,2]

  • 在图像对象内查找“原始”图像对象。可以使用
    object[“PropertyName”]
    语法访问对象中的属性,方法返回与条件匹配的第一个元素。因此,基本上,我们试图找到包含名为“original”的属性的对象

    Object.keys(objJSON.image).find(i=>objJSON.image[i][“original”])

  • 从对象中检索
    src
    属性。
    objJSON.image[originalImageIndexInArray].original.src
    
    var objJSON={
    “姓名”:“开罗”,
    “标题”:“开罗有很多事情要做”,
    “类别”:[“旅行”、“假日”],
    “图像”:[
    {
    “缩略图”:{
    “src”:“/images/thumbnail/cairo.jpg”,
    “高度”:27,
    “宽度”:60
    }
    },
    {
    “移动”:{
    “src”:“/images/mobile/cairo.jpg”,
    “高度”:106,
    “宽度”:236
    }
    },
    {
    “原件”:{
    “src”:“/images/original/cairo.jpg”,
    “高度”:866,
    “宽度”:1920
    }
    }
    ]
    };
    var originalImageIndexInArray=Object.keys(objJSON.image).find(i=>objJSON.image[i][“original”]);
    var originalImageSrc=objJSON.image[originalImageIndexInArray].original.src;
    console.log(originalImageSrc)
    您可以使用从
    图像
    数组中获取带有
    原始
    键的项目,使用获取
    src
    。注意,我们需要通过
    find
    将数组转换
    data.image
    中的方法链接到对象中

    var result = _.chain(data.image)
      .find('original')
      .get('original.src')
      .value();
    
    var数据={
    “姓名”:“开罗”,
    “标题”:“开罗有很多事情要做”,
    “类别”:[“旅行”、“假日”],
    “图像”:[
    {
    “缩略图”:{
    “src”:“/images/thumbnail/cairo.jpg”,
    “高度”:27,
    “宽度”:60
    }
    },
    {
    “移动”:{
    “src”:“/images/mobile/cairo.jpg”,
    “高度”:106,
    “宽度”:236
    }
    },
    {
    “原件”:{
    “src”:“/images/original/cairo.jpg”,
    “高度”:866,
    “宽度”:1920
    }
    }
    ]
    };
    var result=ux0.chain(data.image)
    .find('原件')
    .get('original.src')
    .value();
    控制台日志(结果)
    
    您能更改输入json数组吗?如果图像是一个对象,您可以像使用
    image.original
    属性一样访问它,否则您需要创建一个特殊函数来循环数组并查找属性为“original”的对象