2016-04-15 6 views
-1

С помощью этого JSON объекта:Loop через JSON вложенный массив

{ 
    "date_price": [ 
    { 
     "date": "Jan 2000", 
     "price": 1394.46 
    }, 
    { 
     "date": "Feb 2000", 
     "price": 1366.42 
    }, 
    { 
     "date": "Mar 2000", 
     "price": 1498.58 
    }, 
    { 
     "date": "Apr 2000", 
     "price": 1452.43 
    } 
    ] 
} 

Как я могу перебрать его и сохранить каждую пару финиковой цену в простом массиве, используя что-то вроде этого, например:

var transformation = []; 

transformation.push({date: i, price: d}) 

Поскольку проблема здесь состоит в том, что в консоли, когда я печатаю объект JSON, он говорит, что они являются объектами внутри массива, поэтому я не могу использовать цикл forEach()

+0

Вы не можете '' loop' JSON', вам нужно будет 'JavaScript-объект (массив)' – Rayon

+0

Can вы покажете нам, как будет выглядеть преобразованный объект? Потому что я думаю, что он уже в том же предназначенном виде. – Javid

+1

Он уже точно хранит ключ массива 'date_price'. Просто обратитесь к разделу 'var transform = obj.date_price;' –

ответ

2

Предполагая, что вы разобрали JSON к объекту ...

var obj = JSON.parse(json); 

... map над данными.

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

ES5

var transformation = obj.date_price.map(function(el) { 
    return [ el.date, el.price ]; 
}); 

ES6

var transformation = obj.date_price.map(el => [ el.date, el.price ]); 

ВЫХОД

[ 
    ["Jan 2000", 1394.46], 
    ["Feb 2000", 1366.42], 
    ["Mar 2000", 1498.58], 
    ["Apr 2000", 1452.43] 
] 

DEMO

+0

Используя этот способ, он возвращает [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object], мне просто нужна простая пара дата-цена – Shoplifter20

+1

@ Shoplifter20: Как вы думаете, пара есть? –

+0

Вы имеете в виду вложенный массив '[['Apr 2000', 1452.43] ...]' вместо @ Shoplifter20? – Andy

0

Вы можете сделать что-то вроде этого :

var abc = { 
"date_price": [ 
{ 
    "date": "Jan 2000", 
    "price": 1394.46 
}, 
{ 
    "date": "Feb 2000", 
    "price": 1366.42 
}, 
{ 
    "date": "Mar 2000", 
    "price": 1498.58 
}, 
{ 
    "date": "Apr 2000", 
    "price": 1452.43 
} 
] 
} 
var array = $.map(abc, function(value, index) { 
    return [value]; 
}); 

https://jsfiddle.net/atg5m6ym/3271/

+0

Где находится JSON? –

+0

какой json? @LightnessRacesinOrbit Я тестировал код, и он работает без каких-либо проблем. –

+0

http://json.org Это текстовый обменный формат. Ваш код работает нормально, но он не имеет отношения к вопросу, который в настоящее время написан. –

0

Самое простое решение. Он уже в нужном формате. Вам просто нужно удалить гнездование.

var obj = { 
    "date_price": [ 
    { 
     "date": "Jan 2000", 
     "price": 1394.46 
    }, 
    { 
     "date": "Feb 2000", 
     "price": 1366.42 
    }, 
    { 
     "date": "Mar 2000", 
     "price": 1498.58 
    }, 
    { 
     "date": "Apr 2000", 
     "price": 1452.43 
    } 
    ] 
}; 

var array = obj['date_price']; 

И все.

+0

Где находится JSON? –

+0

Извините, изменено мое решение, чтобы включить установку json в переменную. – jlemm45

+0

OP сказал: «С помощью этого объекта JSON:» затем отправляет объект javascript, а не JSON. Было неясно, с чем он работал, потому что он сказал одно и отправил другое. Использование кода OP не представляется достойным -1. – IrkenInvader

1

EDIT: у вас уже есть JSON как объект, тогда вам просто нужно получить от него свойство date_price. Это массив точно типов объектов, вам требуется ... так ...

var result = jsonObject.date_price; // THIS is your array here. 

Или ...

var result = jsonObject['date_price']; // THIS is your array here. 

Предыдущий ответ, данный, который принимает строку JSON .. .

Просто используя это ...

// This is just your JSON string above. 
var text = '{ "date_price": [ { "date": "Jan 2000", "price": 1394.46 }, { "date": "Feb 2000", "price": 1366.42 }, { "date": "Mar 2000", "price": 1498.58 }, { "date": "Apr 2000", "price": 1452.43 } ] }'; 

// Parse it as an object. 
var obj = JSON.parse(text); 

// Get the date_price property, which is an array already. 
var result = obj.date_price; 

// Some output here, to illustrate... 
console.log(result); 
for (var i = 0; i < result.length; i++) { 
    console.log(result[i]); 
} 
+0

Это уже ответ приложения/json, нет необходимости разбирать – Shoplifter20

+0

@ Shoplifter20: Ответ от чего? Вы никогда не упоминали «ответ» в своем вопросе. Таким образом, ваш код фактически получает объект JavaScript, а не JSON? Не могли бы вы быть ясными, пожалуйста? –

+2

Если у вас уже есть объект, просто опустите эту часть на разбор строки. В этом случае вам просто нужно получить свойство date_price из вашего объекта JSON. Если вы хотите пройти через этот массив и направить эти элементы в отдельный массив, то это зависит от вас, но вам действительно не нужно, поскольку у вас уже есть массив с тем же соглашением об именовании свойств в объекте, который у вас есть уже. – ManoDestra

1

Простое решение с помощью JSON.parse и Array.map функции:

var jsonStr = '{"date_price": [{ "date": "Jan 2000", "price": 1394.46 },{"date": "Feb 2000",  "price": 1366.42},{"date": "Mar 2000","price": 1498.58},{"date": "Apr 2000","price": 1452.43}]}', 
 
    jsonObj = JSON.parse(jsonStr); 
 

 
//var transformation = jsonObj["date_price"]; // to get a nested array 
 

 
var transformation = jsonObj["date_price"].map(function(v){ return v; }); // to perform test artificial loop 
 
    
 
document.write("<pre>"+ JSON.stringify(transformation, 0, 4) + "</pre>");

+1

'.map (function (v) {return v;})' по существу не-op. – georg

+0

@georg, я знаю, но автор сказал: «Как я могу пройти через него», и я думал, что он хочет выполнить искусственный цикл (конечно, он мог бы получить массив только с помощью 'transform = jsonObj [" date_price "] '). – RomanPerekhrest

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