Поле JSON API Django извлекает объект, который я не могу использовать .map для анализа и последующего построения диаграммы
У меня есть сериализованное поле API Django, содержащее данные базы данных JSONField, которые создают диаграмму (подтверждено, что эти данные работают на моем сервере Flask), но я не могу использовать те же данные, взятые из API Django
'''
// data.data.linechart: "[{'index': 129, 'Strategy': 28.893}, {'index': 1304, 'Strategy': 33.331}]"
fetch(url)
.then(response => response.json())
.then(data => {
var dataArray = Object.keys(data.data.linechart).map(function(key) {
return [key, data.data.linechart[key]];
});
// Convert the array of key-value pairs to a format that supports map
var mapData = dataArray.map(function(item) {
return { index: item[0], Strategy: item[1] };
});
const series = [
{
name: 'Strategy',
data: mapData
}
];
//Apex Chart
var optionsChart = {
series: [{
name: 'New Data',
data: series
}],
Что я здесь упускаю?
Функция Fetch извлекает сериализованные данные API в виде объекта, и приведенное выше преобразование не работает. Сталкивались ли другие с такой же проблемой?
Я пробовал:
- JSON.parse(данные),
- JSON.stringify(данные),
- Снимаем скобки: const массив данных = data2.данные.линейная диаграмма.заменяем('[', "").заменяем(']', ");
- изменяем data.data.linechart на data.data, а затем изолируем linechart = "[{'индекс': 129, 'Стратегия': 28.893}, {'индекс': 1304, 'Стратегия': 33.331}]"
но я не могу преобразовать данные диаграммы в формате JSON из объекта - без разделения строки JSON на отдельные символы...
Ответом на этот вопрос было терпение. Ответ, конечно, был прост, теперь, когда я знаю, как к нему подступиться.
- Сначала я проверил полученные данные и подтвердил, что это строка с "typeof"
- Затем я обнаружил, что JSON в базе данных заключен в одинарные кавычки, поэтому смотрите исправление для двойных кавычек ниже - и @Serhiy Fomenko указал на решение json.dumps, которое также может сработать.
- Text.replace позволил мне выполнить JSON.parse - шаг 3, который создает массив, с которым может работать .map ... и все готово. Надеюсь, это поможет...
'''
fetch(url)
.then(response => response.json())
.then(data => {
console.log("data", data);
console.log("jsonchartData", data.data.jsonchartData);
// test that JSONdata is a string
console.log("jsonchartData tests", typeof data.data.jsonchartData, typeof JSON.stringify(data.data.jsonchartData));
var lineChartData = data.data.jsonchartData;
// parsing this string requires double-quotes, not single
lineChartData = lineChartData.replace(/'/g, '"');
console.log('JSON string:', lineChartData);
try {
var parsedData = JSON.parse([lineChartData]); // this creates an array that can be mapped
console.log('Parsed data:', parsedData);
if (Array.isArray(parsedData)) {
console.log('Parsed data is an array');
var xLabel = parsedData.map(d => d.xLabel);
var yLabel = parsedData.map(d => parseFloat(d.yLabel.toFixed(2)));
console.log("xLabel", xLabel);
console.log("yLabel", yLabel);
} else {
console.log('Parsed data is not an array');
}
} catch (e) {
console.error('Error parsing JSON:', e);
}