2015-11-05 3 views
0

Я работаю над графическими API-интерфейсами Google и диаграммами подсветок Google Визуализации ожидает, что данные будут массивом массивов для его работы.Как разобрать массив объектов JSON и создать массив из него

С заднего конца я reciving данные в этом формате

[ 
    { 
     "current_day":"2011-08-01", 
     "open_val":136.65, 
     "high_val":136.96, 
     "low_val":134.15, 
     "close_val":134.15 
    }, 
    { 
     "current_day":"2011-08-02", 
     "open_val":135.26, 
     "high_val":135.95, 
     "low_val":131.50, 
     "close_val":131.85 
    } 
] 

Не могли бы вы сказать мне, как я могу построить эти данные ниже формате

[ 
[ "2011-08-01", 136.65, 136.96, 134.15, 136.49 ], 
[ "2011-08-02", 135.26, 135.95, 131.50, 131.85 ] 
] 

кормить его в формат ввода Подсвечник данные в графиках Google.

моя скрипка

http://jsfiddle.net/Lm5mLg1d/

ответ

1

Для этого вам понадобится список свойств, начиная с JavaScript object properties are unordered по определению.

При том, что это просто:

var props = [ 
 
    "current_day", "open_val", "high_val", "low_val", "close_val" 
 
]; 
 

 
var data = [ 
 
    { 
 
     "current_day":"2011-08-01", 
 
     "open_val":136.65, 
 
     "high_val":136.96, 
 
     "low_val":134.15, 
 
     "close_val":134.15 
 
    }, 
 
    { 
 
     "current_day":"2011-08-02", 
 
     "open_val":135.26, 
 
     "high_val":135.95, 
 
     "low_val":131.50, 
 
     "close_val":131.85 
 
    } 
 
] 
 

 
var arrays = data.map(
 
    function (o) { 
 
    var array = []; 
 
    
 
    props.forEach(
 
     function (prop) 
 
     { 
 
     array.push(o[prop]); 
 
     } 
 
    ); 
 
    
 
    return array; 
 
    } 
 
); 
 

 
console.log(arrays);

Или, старые браузеры не хватает map() и forEach():

var props = [ 
 
    "current_day", "open_val", "high_val", "low_val", "close_val" 
 
]; 
 

 
var data = [ 
 
    { 
 
     "current_day":"2011-08-01", 
 
     "open_val":136.65, 
 
     "high_val":136.96, 
 
     "low_val":134.15, 
 
     "close_val":134.15 
 
    }, 
 
    { 
 
     "current_day":"2011-08-02", 
 
     "open_val":135.26, 
 
     "high_val":135.95, 
 
     "low_val":131.50, 
 
     "close_val":131.85 
 
    } 
 
] 
 

 
var arrays = []; 
 

 
for (var i = 0; i < data.length; ++i) 
 
    { 
 
    var array = []; 
 
    
 
    for (var j = 0; j < props.length; ++j) 
 
     { 
 
     array.push(data[i][props[j]]); 
 
     } 
 
    
 
    arrays.push(array); 
 
    } 
 

 
console.log(arrays);

+0

благодарит много за его работу, но почему вы возвращаете массив, мне нужно вызвать функцию и поставить jsonobect? – Pawan

+0

Что делать, если объекты приобретают или теряют свойство или это свойство изменяет его имя? Или даже если какой-либо объект не имеет одного из них или имеет другое значение? –

+0

@PreethiJain Это просто возврат из внутренней функции 'map()'. –

0

Вы можете попробовать это

Вам необходимо отобразить массив, поэтому каждый новый термин значение каждого ключа, содержащегося объекта, так:

var stuff = [ 
    { 
     "current_day":"2011-08-01", 
     "open_val":136.65, 
     "high_val":136.96, 
     "low_val":134.15, 
     "close_val":134.15 
    }, 
    { 
     "current_day":"2011-08-02", 
     "open_val":135.26, 
     "high_val":135.95, 
     "low_val":131.50, 
     "close_val":131.85 
    } 
]; 

var result = stuff.map(function (object) { 
    var arr = []; 
    for(var prop in object) { 
    arr.push(object[prop]); 
    } 
    return arr; 
}); 

alert(result); 
+0

Спасибо, но когда я побежал ваш код я получаю Блок-Scoped декларации (пусть, Const, функция, класс) пока не поддерживается вне строгого режима в консоли браузера. – Pawan

+0

Я свяжу вас с plunkr, потому что я использовал let. Изменить let to var, и он должен работать, я делаю plunkr –

+0

[Свойства JavaScript неупорядочены] (http://stackoverflow.com/a/5525820/1324). Вы не можете полагаться на 'for ... in' return' current_day' и т. Д. –

0

Вы можете просто написать функцию для достижения этой цели. Что-то вроде ниже должно работать:

var myJson = [{ 
    "current_day": "2011-08-01", 
     "open_val": 136.65, 
     "high_val": 136.96, 
     "low_val": 134.15, 
     "close_val": 134.15 
}, { 
    "current_day": "2011-08-02", 
     "open_val": 135.26, 
     "high_val": 135.95, 
     "low_val": 131.50, 
     "close_val": 131.85 
}]; 
var myArr = []; 
var i = 0; 
for (i = 0; i < myJson.length; i++) { 
    myArr.push({ 
     myJson.current_day, myJson.open_val, myJson.high_val, myJson.low_val, myJson.close_val 
    }); 
} 
Смежные вопросы