Преобразование данных JSON в массив Chart.js из строк - PullRequest
0 голосов
/ 10 июня 2018

Я извлекаю данные из файла JSON, хранящегося как переменная Javascript:

var jsonFile = {
  "profiles": [{
      "time": 0,
      "conc": 0.15,
      "fitted": 0.1,
      "non": 0,
      "prior": 30,
      "missed": 2.9,
      "wrong": 2.9,
      "mix": 0.15,
      "temp": 0.015,
      "gel": 0.03,
      "data": 4
    },
    {
      "time": 1,
      "conc": 11,
      "fitted": 10,
      "non": 5,
      "prior": 35,
      "missed": 2.35,
      "wrong": 25,
      "mix": 11,
      "temp": 1.1,
      "gel": 2.2,
      "data": 4
    },
    {...}
  }];

Я извлекаю нужные мне пары данных для конкретной линии на графике, используя метод map():

var dataPairs = jsonFile.profiles.map(function(e) { return '{x:' + e.time + ', y:' + e.fitted + '}'; });

А потом я попытался отформатировать его как массив, необходимый для Chart.js

var dataPairs2 = '[' + dataPairs + ']';

Так что для линии графика data я бы назвал dataPairs2.Посмотрев на console.log(dataPairs2), я понял, что он не обрабатывается как массив.dataPairs - это и массив, но каждая запись является строкой, поэтому вызов для нее вместо строки data также не работает.

Итак, я пытаюсь выяснить, как преобразовать dataPairs2 в массив.JSON.Parse(), похоже, не работает, потому что это не стандартный формат (я предполагаю), и я не думаю, что я могу использовать split() с запятыми в качестве разделителя, потому что каждая запись массива содержит запятую.

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Я не уверен, что это то, что вы ищете, но вы можете просто вернуть Object вместо String.Поэтому верните:

{x: e.time, y: e.fitted}

вместо:

'{x:' + e.time + ', y:' + e.fitted + '}'

в вашем отображении.

Вот код:

const jsonFile = {profiles:[{time:0,conc:.15,fitted:.1,non:0,prior:30,missed:2.9,wrong:2.9,mix:.15,temp:.015,gel:.03,data:4},{time:1,conc:11,fitted:10,non:5,prior:35,missed:2.35,wrong:25,mix:11,temp:1.1,gel:2.2,data:4}]};


const dataPairs = jsonFile.profiles.map(e => ({x: e.time, y: e.fitted}) )

console.log(dataPairs)
0 голосов
/ 10 июня 2018

Просто отформатируйте их таким образом при первом вызове карты.Вместо использования map для создания массива строк, используйте его для создания массива объектов.

jsonFile.profiles.map(v => ({ x: v.time, y: v.fitted }) );

var jsonFile = {
  "profiles": [
    { "time": 0, "conc": 0.15, "fitted": 0.1, "non": 0, "prior": 30, "missed": 2.9, "wrong": 2.9, "mix": 0.15, "temp": 0.015, "gel": 0.03, "data": 4 },
    { "time": 1, "conc": 11, "fitted": 10, "non": 5, "prior": 35, "missed": 2.35, "wrong": 25, "mix": 11, "temp": 1.1, "gel": 2.2, "data": 4 }
]};

const d = jsonFile.profiles.map(v => ({ x: v.time, y: v.fitted }) );

console.log(d);
...