JSON-поиск по ключам с именами переменных (неизвестно)
Total 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" в ключе или что-то еще, были бы очень оценены.
Спасибо!
3 ответа:
Вы не можете просто искать по каждому полю с частичным совпадением, поэтому вам придется перебирать каждое поле, а затем проверять имена полей на соответствие. Попробуйте что-нибудь вроде этого:
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) в основном, проверьте, соответствует ли он
4) Используйте эти данные, как вам заблагорассудитсяcontent_ANY NUMBERS_image
гдеANY NUMBERS
равно по крайней мере одной цифре или болееconsole.log(json[key])
Надеюсь, это поможет!
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