2014-11-24 6 views
0

Я пытаюсь визуализировать данные, полученные из файла JSON в REST api. Я использую Morris js для создания простой гистограммы. Мне сложно определить, как правильно форматировать массив javascript.Переместить значения из JSON в массив javascript

Диаграмма формируется следующим образом:

Morris.Bar({ 
    element: 'myfirstchart', 
    data: [ 
     { year: '2008', value: 20 }, 
     { year: '2009', value: 10 }, 
     { year: '2010', value: 5 }, 
     { year: '2011', value: 5 }, 
     { year: '2012', value: 20 } 
    ], 
    xkey: 'year', 
    ykeys: ['value'], 
    labels: ['Series A'] 
}); 

Я пытался сохранить значения из структуры JSON в переменной:

var USD = data.d.results[0].ExchangeCross; 
var USD2 = data.d.results[0].ApprovedRate; 

Для того, чтобы добавить их к диаграмме я попытался добавить их в массив, как это:

var obj = { year: USD, value: USD2 }; 

, а затем изменить data:[] к data:obj. Это не работает. Оптимальным решением было бы запустить функцию each для всех значений, которые мне нужны, а затем нарисовать их в диаграмме.

Edit forEach function:

$(document).ready(function() { 
    $.ajax({ 
     url: "http://intra.site.com/_vti_bin/ListData.svc/ExchangeRates?$orderby=Modified%20desc", 
     headers: { 'accept': 'application/json;odata=verbose', 'content-type': 'application/json;odata=verbose'}, 
     success: function(data){ 
        var params = { 
         element: 'myfirstchart', 
         data: [], 
         xkey: 'year', 
         ykeys: ['value'], 
         labels: ['Series A'] 
            }; 

         var data = JSON.parse(data); 

         data.d.results.forEach(function(element) { 
         var obj = { "year": element.ExchangeCross, "value": element.ApprovedRate }; 
         params.data.push(obj); 
        }); 

        Morris.Bar(params); 

           } 
      }); 
    }); 

ответ

1

Вы должны загрузить данные, полученные в JSON с API в диаграмме Морриса. Вы делаете это, перейдя через ваш JSON, создавая объект и выталкивая его в массив.

Предполагая, что это JSON, что вы получите:

var jsonString = '{"d": {"results": [{"ExchangeCross": "2010", "ApprovedRate": "20"}, {"ExchangeCross": "2011", "ApprovedRate": "5"}, {"ExchangeCross": "2012", "ApprovedRate": "15"}, {"ExchangeCross": "2013", "ApprovedRate": "35"}, {"ExchangeCross": "2014", "ApprovedRate": "10"}]}}'; 

Создание объекта Params для использования с вашей карты Моррис, с data как пустой массив:

var params = { 
    element: 'myfirstchart', 
    data: [], 
    xkey: 'year', 
    ykeys: ['value'], 
    labels: ['Series A'] 
}; 

Разбираем ваш JSON (если у вас есть строка):

var data = JSON.parse(jsonString); 

Итерация через results массив, который обернут внутри d, создать совместимый объект со значениями, которые необходимо и толчке, что объект в params.data массив:

data.d.results.forEach(function(element) { 
    var obj = { "year": element.ExchangeCross, "value": element.ApprovedRate }; 
    params.data.push(obj); 
}); 

Позвоните в Morris.Bar с params:

Morris.Bar(params); 

.

+0

Это не работает, я не уверен, правильно ли обрабатываются данные. Я отредактирую исходную запись, чтобы включить ваши предложения. – TietjeDK

+0

Нет нет .. в этом случае просто удалите строку 'var data = JSON.parse (data);'. Потому что у вас уже есть разобранный json в этот момент. – Abhitalks

+0

Thx a bunch! Это отлично работает! – TietjeDK

0

Если я понимаю, что вы, что вы пытаетесь заменить data часть объекта JS, который вы передаете в функцию Morris Bar?

Вам необходимо создать массив, а не объект.

попробовать что-то вроде этого:

var USD = data.d.results[0].ExchangeCross; 
var USD2 = data.d.results[0].ApprovedRate; 

var dataArray = []; 

// push each item into the array 
dataArray.push({year: USD, value: USD2}); 

Morris.Bar({ 
    element: 'myfirstchart', 
    data: dataArray, 
    xkey: 'year', 
    ykeys: ['value'], 
    labels: ['Series A'] 
}); 
+0

Thx - именно то, что я искал. Что делать, если я хотел бы добавить несколько значений? Было бы что-то вроде 'dataArray.push ({year: USD, value: USD2}, {year: SGD, value: SGD2})'? – TietjeDK

+0

'push' просто добавляет один элемент в массив. Если вы хотите добавить несколько элементов, вы можете сделать это при создании массива.Например, 'dataArray = [{year: USD, value: USD2}, {year: SGD, value: SGD2}];' – jasonscript

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

  • Нет связанных вопросов^_^