此处共有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'在钥匙或其他东西,将非常感激。
谢谢!
答案 0 :(得分:9)
您不能只搜索部分匹配的每个字段,因此您必须遍历每个字段,然后检查匹配的字段名称。尝试这样的事情:
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])
希望这有帮助!
答案 1 :(得分:3)
您可以使用for ... in
for (key in object) {
// check match & do stuff
}
答案 2 :(得分:2)
var json = JSON.parse(YOUR_JSON_STRING).custom_fields, //Fetch your JSON
image; //Pre-declare image
for(key in json){ //Search each key in your object
if(key.indexOf("image") != -1){ //If the index contains "image"
image = json[key]; //Then image is set to your image array
break; //Exit the loop
}
}
/*
image[0] //the URL
image[1] //the width
image[2] //the height
image[3] //your boolean