一尘不染

JSON-搜索带有变量名的键(未知)

json

此处共有JSON noob。我试图通过一些JSON循环从对象内部的数组中提取第一个图像,经过4个小时的尝试,我决定可能需要一些帮助。

我能够从我知道键的对象中拉出我需要的每个值,但是我有一些数据具有不一致的键名,我基本上需要通过查找部分匹配项然后从中拉出第一个来进行迭代这些结果。

未知元素的Json结构如下所示:

"custom_fields": {
    "content_0_subheading": [
      "Title text"
    ],
    "content_1_text": [
      "Some text"
    ],
    "content_2_image": [
      [
        "http://staging.livelivelyblog.assemblo.com/wp-content/uploads/2013/09/wellbeing-260x130.jpg",
        260,
        130,
        true
      ]
    ],
    "content_2_caption": [
      ""
        ]
}

在这种情况下,我需要的是content_2_image,但就我所知,在另一个条目中它可能是content_20_image(有很多数据要提取)。

任何在这些未知键中循环查找以寻找键中“ _image”或某些内容的部分匹配的最佳方法的想法,将非常受赞赏。

谢谢!


阅读 231

收藏
2020-07-27

共1个答案

一尘不染

您不能只搜索具有部分匹配项的每个字段,所以您必须遍历每个字段,然后检查匹配项的字段名称。尝试这样的事情:

var json = {
  "content_0_subheading": [
    "Title text"
  ],
  "content_1_text": [
    "Some text"
  ],
  "content_2_image": [
    [
      "http://staging.livelivelyblog.assemblo.com/wp-content/uploads/2013/09/wellbeing-260x130.jpg",
      260,
      130,
      true
    ]
  ],
  "content_2_caption": [
    ""
  ]
}

for (var key in json) {
    if (json.hasOwnProperty(key)) {
        if (/content_[0-9]+_image/.test(key)) {
            console.log('match!', json[key]); // do stuff here!
        }
    }
}

基本上,我们正在做的是:

1)循环遍历json对象的键 for (var key in json)

2)确保json具有该属性,并且我们不访问不需要的键 if (json.hasOwnProperty(key))

3)检查键是否与正则表达式匹配 /content_[0-9]+_image/

图3a)基本上,如果它匹配测试content_ANY NUMBERS_image,其中ANY NUMBERS是等于至少一个数位或更多

4)随便使用该数据 console.log(json[key])

希望这可以帮助!

2020-07-27