Изменение формата данных JSON в соответствии с массивом JS

0

Я хочу взять временную метку/закрыть данные JSON из http://chartapi.finance.yahoo.com/instrument/1.1/goog/chartdata;type=close;range=1d/json/?callback=?

Чтобы выглядеть как массив JS, как в http://www.highcharts.com/samples/data/jsonp.php?filename=goog-c.json&callback=?

См. Http://jsfiddle.net/gMs6n/ (обновлено: http://jsfiddle.net/gMs6n/2/) (просмотр консоли для просмотра журнала данных) Рабочая версия с использованием примера Highcharts: http://jsfiddle.net/gMs6n/1/

$(function () {

  // ajax in data 
  $.ajax({
    type: 'GET',
    dataType: 'jsonp',
    cache: true, jsonp: false, jsonpCallback: 'graph',
    url: 'http://chartapi.finance.yahoo.com/instrument/1.1/goog/chartdata;type=close;range=1d/json/?callback=graph', // http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=graph
    processData: false
  }).success(function(data) {

    // manipulate the data
    console.log(data);
    //JSON.parse(data);

    // create a new data object
    $.each(data.series, function (i, val) {
      for (var key in data.series[i]) {
        //console.log(key);
        console.log(data.series[i][key]); // how to pair up the timestamp/close in a new data object?
      }
    });

    // Create the chart
    /*
    $('#container').highcharts('StockChart', {
      series: [{
        data: data,
        tooltip: {
          valueDecimals: 2
        }
      }]
    });
    */


  });

});

Я попробовал JSON.parse(data); и $.parseJSON(data); но я получаю сообщение об ошибке. Я должен делать что-то неправильно.

Как я могу манипулировать им post-ajax, чтобы в итоге получить "данные", которые могут использовать Highcharts? Я использую $.each для перебора данных для формирования нового набора данных. Как связать отметку времени/закрытия в новом объекте данных?

  • 0
    Перебирайте данные, создавая новые данные из старых данных, которые соответствуют желаемому результату. JSON.parse и $.parseJSON бесполезны для этой задачи, кроме первоначального преобразования строки json в массив / объект javascript, что jquery уже делает для вас.
  • 0
    Данные уже являются объектами JavaScript (не JSON, JSON - это текст ). jQuery обрабатывает преобразование прозрачно, если dataType имеет значение «json» или «jsonp». Используйте отладчик в обратном вызове успеха, осмотрите data и посмотрите, какую структуру они содержат - и используйте их соответствующим образом.
Показать ещё 6 комментариев
Теги:
arrays

2 ответа

0

Надеюсь, это то, что вы искали или, по крайней мере, приблизили вас к цели:

  }).success(function(data) {
   var series = data.series.map(function(data){ return [data.Timestamp, data.close] ;   });
// manipulate the data
  console.log(series[0]);

Это приведет к одному массиву с таким форматом:

[1389018600, 1114.25] 

Это обновленный Fiddle:

http://jsfiddle.net/gMs6n/4/

0

Работа: http://jsfiddle.net/gMs6n/5/

$(function () {

  // ajax in data 
  $.ajax({
    type: 'GET',
    dataType: 'jsonp',
    cache: true, jsonp: false, jsonpCallback: 'graph',
    url: 'http://chartapi.finance.yahoo.com/instrument/1.1/goog/chartdata;type=close;range=1d/json/?callback=graph', // http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=graph
    processData: false
  }).success(function(data) {

    // manipulate the data
    //console.log(data);
    //JSON.parse(data);
    var chartData = [];

    $.each(data.series, function (i, val) {
      for (var key in data.series[i]) {
        //console.log(key);
        //console.log(data.series[i][key]); 
      }
      var chartTime = data.series[i].Timestamp;
      var chartClose = data.series[i].close;
      //console.log(data.series[i]);
      //console.log(chartTime);
      chartData.push([chartTime, chartClose]);
    });

    console.log(chartData);


    // Create the chart
    $('#container').highcharts('StockChart', {
      series: [{
        data: chartData,
        tooltip: {
          valueDecimals: 2
        }
      }]
    });

  });

});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню