如何加载动态的 JSON 数组?
How to load a JSON array which is dynamic?
为什么这个 JSON 不起作用?我正在尝试循环所有 gallery 数组 large 项目。我将来可能会将它们附加到 table 或其他东西中,但我什至不能 console.log 这些值。我试过使用键值,但没有运气!最重要的是,下面的画廊 JSON 具有 204473、204474 等值,这些是动态的,因此我认为我需要将它们视为密钥?
function changeImages(data){
// JSON
var data = data;
// Loop through all the JSON
for (var key in data) {
if (data.hasOwnProperty(key)) {
// Get the gallery array
var value = data[key]["gallery"];
for (var keyI in value){
// Get the keys
console.log(value[keyI].large);
}
}
}
}
function onPageLoad(){
var strProductId = id;
// POST MAGENTO MAGE API CALL
jQuery.ajax({
type: "POST",
url: "/swatches/ajax/media",
data: "product_id="+strProductId,
success: function(data){
changeImages(data)
}
});
}
onPageLoad(64413);
所以我通过 $.post 得到我的 JSON,returns 很好。这是示例 JSON:
{
"large": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"medium": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"small": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"gallery": {
"204472": {
"large": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"medium": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"small": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg"
},
"204473": {
"large": "https:\/\/res-4.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_2.jpg",
"medium": "https:\/\/res-4.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_2.jpg",
"small": "https:\/\/res-4.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_2.jpg"
},
"204474": {
"large": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_3.jpg",
"medium": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_3.jpg",
"small": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_3.jpg"
},
"204475": {
"large": "https:\/\/res-3.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_4.jpg",
"medium": "https:\/\/res-3.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_4.jpg",
"small": "https:\/\/res-3.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_4.jpg"
},
"204476": {
"large": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_5.jpg",
"medium": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_5.jpg",
"small": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_5.jpg"
}
}
}
您必须将处理逻辑修改为:
function changeImages(data){
var gallery = data["gallery"];
for (var key in gallery){
// show all the gallery large images and loop through them
console.log(gallery[key].large);
}
}
我所做的只是去掉外部 for ... in
并重命名一些变量,使其更清晰。
根据你最初的问题,你希望你的数据在一个数组中,但它不是。
所以如果你修改了第二行,那也会解决它,虽然上面的答案更干净,我不会在数组中做 for ... in
,尤其是只有一个元素的数组:
function changeImages(data){
// JSON
var data = [data]; //Note: I changed this line
// Loop through all the JSON
for (var key in data) {
if (data.hasOwnProperty(key)) {
// Get the gallery array
var value = data[key]["gallery"];
for (var keyI in value){
// Get the keys
console.log(value[keyI].large);
}
}
}
}
为什么这个 JSON 不起作用?我正在尝试循环所有 gallery 数组 large 项目。我将来可能会将它们附加到 table 或其他东西中,但我什至不能 console.log 这些值。我试过使用键值,但没有运气!最重要的是,下面的画廊 JSON 具有 204473、204474 等值,这些是动态的,因此我认为我需要将它们视为密钥?
function changeImages(data){
// JSON
var data = data;
// Loop through all the JSON
for (var key in data) {
if (data.hasOwnProperty(key)) {
// Get the gallery array
var value = data[key]["gallery"];
for (var keyI in value){
// Get the keys
console.log(value[keyI].large);
}
}
}
}
function onPageLoad(){
var strProductId = id;
// POST MAGENTO MAGE API CALL
jQuery.ajax({
type: "POST",
url: "/swatches/ajax/media",
data: "product_id="+strProductId,
success: function(data){
changeImages(data)
}
});
}
onPageLoad(64413);
所以我通过 $.post 得到我的 JSON,returns 很好。这是示例 JSON:
{
"large": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"medium": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"small": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"gallery": {
"204472": {
"large": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"medium": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg",
"small": "https:\/\/res-1.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_1.jpg"
},
"204473": {
"large": "https:\/\/res-4.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_2.jpg",
"medium": "https:\/\/res-4.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_2.jpg",
"small": "https:\/\/res-4.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_2.jpg"
},
"204474": {
"large": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_3.jpg",
"medium": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_3.jpg",
"small": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_3.jpg"
},
"204475": {
"large": "https:\/\/res-3.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_4.jpg",
"medium": "https:\/\/res-3.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_4.jpg",
"small": "https:\/\/res-3.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_4.jpg"
},
"204476": {
"large": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_5.jpg",
"medium": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_5.jpg",
"small": "https:\/\/res-5.xxxx.net\/image\/upload\/dpr_auto,f_auto,q_auto,w_auto\/d_coming-soon.jpg\/media\/catalog\/product\/8\/8\/886535528239_5.jpg"
}
}
}
您必须将处理逻辑修改为:
function changeImages(data){
var gallery = data["gallery"];
for (var key in gallery){
// show all the gallery large images and loop through them
console.log(gallery[key].large);
}
}
我所做的只是去掉外部 for ... in
并重命名一些变量,使其更清晰。
根据你最初的问题,你希望你的数据在一个数组中,但它不是。
所以如果你修改了第二行,那也会解决它,虽然上面的答案更干净,我不会在数组中做 for ... in
,尤其是只有一个元素的数组:
function changeImages(data){
// JSON
var data = [data]; //Note: I changed this line
// Loop through all the JSON
for (var key in data) {
if (data.hasOwnProperty(key)) {
// Get the gallery array
var value = data[key]["gallery"];
for (var keyI in value){
// Get the keys
console.log(value[keyI].large);
}
}
}
}