2016-05-06 2 views
0

пытаюсь получить значение из файла JSonJS Как получить значение объекта из массива внутри массива внутри каждого цикла

Вот живой codepen того, что я работаю на codepen.io/ krm218/ручка/vGvaNN

Вот скриншот моего JSon файла или перейти к https://api.myjson.com/bins/4ky5s

JSON

Я пытаюсь получить главный ракурс, альт-вид-1 и т.д. из массива изображений. Я был в состоянии получить другие значения, такие как описание и ид с этим кодом

$.getJSON("json.json", function(data){ 
    $.each(data.products, function() { 
    $("#results").append(
    this["id"] + this["description"] 
    ); 
    }); 
}); 

Когда я this["images"], я получаю

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] 

Как я могу получить эти значения?

+1

Можете ли вы разместить фактический объект в качестве кода? – JordanHendrix

+1

'images' - это еще один массив, вы можете получить эти значения так же, как вы это делаете, с другими значениями, цикл и доступ к объектам внутри массива, а затем свойства и т. Д. – adeneo

+0

выглядит так, будто вы принуждаете объекты изображения в строки. Вы используете '' '' '' '' этот ["images"] 'где-нибудь? – Aweary

ответ

0

Я изменил свой JSON немного, так что изображения хранятся в виде объекта (как ассоциативный массив) под объектом продукта, так вот где я начал с JSON (я только добавил один продукт):

var data = { 
    products:[ 
    { 
     description:'Matte black', 
     id:1, 
     images:{ 
     "main-view":'/images/1/mainView.png', 
     "alt-view-1":"/images/1/altView1.png", 
     "alt-view-2":"/images/1/altView2.png", 
     "alt-view-3":"/images/1/altView3.png", 
     "alt-view-4":"/images/1/altView4.png", 
     "alt-view-5":"/images/1/altView5.png" 
     } 
    } 
    ] 
}; 

С их помощью в этом формате вы можете использовать функцию jQuery each для прокрутки изображений, при этом параметрами являются имя и значение ключа в каждой функции. Вы можете создать список изображений из них (или использовать значение однако) с помощью цикла и используя к и V для печати их ключа и значения соответственно:

$.each(data.products, function(){ 

    var imageList = $("<div>").addClass("image-list"); 

    $.each(this.images, function(k, v){ 
    imageList.append(
     $("<div>").addClass('image').append(
     $("<span>").addClass('image-name').append(k + " = "), 
     $("<span>").addClass('image-url').append(v) 
    ) 
    ); 
    }); 

    $('#results').append(
    $("<div>").addClass('product').append(
     $("<div>").addClass('product-id').append(this.id), 
     $("<div>").addClass('product-desc').append(this.description), 
     imageList 
    ) 
); 
}); 

Результаты должны выглядеть следующим образом:

1 
Matte black 
main-view = /images/1/mainView.png 
alt-view-1 = /images/1/altView1.png 
alt-view-2 = /images/1/altView2.png 
alt-view-3 = /images/1/altView3.png 
alt-view-4 = /images/1/altView4.png 
alt-view-5 = /images/1/altView5.png 

Вот Fiddle демонстрирующее: https://jsfiddle.net/5yc733k4/

+0

hi @ mark.hch благодарит за ваш ответ. К сожалению, я не могу изменить структуру json-файла, поэтому должен выяснить, как это сделать так, как есть. –

1

Вот как вы можете получить там:

Working Example

var arr = obj.products; 

for (var i = 0; i < arr.length; i++) { 
    var images = arr[i].images; 
    for (var img in images) { 
    console.log(images[img]); 
    } 
} 
+0

Будет ли это проходить внутри каждого цикла, который у меня есть? См. Здесь код http://codepen.io/krm218/pen/vGvaNN –

+0

ну и все, что вам нужно сделать сейчас, это изменение var arr = obj.products to var arr = data.products, которое я только что пробовал в ручке и это работает – JordanHendrix

+0

Я вижу! Спасибо @ JordanHendrix. –

0

это.изображения [0] ['main-view'] сделал трюк!

Смежные вопросы