У меня проблема с преобразованием строки в объект массива.
Моя строка выглядит как [{ label: "BSP", y: 3 },{ label: "BJP", y: 10 }]"}] Я хочу, чтобы она была такой
[
{ label: "BSP", y: 3 },
{ label: "BJP", y: 10 }
]
Описание проблемы
Я работал над графиком Canvas Js. Мне нужна диаграмма по запросу ajax.
Мой пример кода
jQuery.ajax({
url: baseurl+"api/",
data: postData,
type: 'POST',
success: function(html) {
var poll_result = JSON.parse(html); // html = [{"question":"Lorem ipsum","title":"Poll Result","data_option":"[{ label: \"BSP\", y: 3 },{ label: \"BJP\", y: 10 },{ label: \"Congress\", y: 4 },{ label: \"AAP\", y: 1 },{ label: \"SP\", y: 2 },{ label: \" SP\", y: 1 }]"}]
var data_option = poll_result.data_option.replace(/\/g, "");
var chart = new CanvasJS.Chart("chartContainer", {
animationEnabled: true,
axisX: {
interval: 10
},
axisY: {
title: poll_result.title,
},
data: [{
type: "bar",
dataPoints: data_option
// dataPoints: [ { label: "BSP", y: 3 }, { label: "BJP", y: 10 }, { label: "Congress", y: 4 }] // Working code
}]
});
chart.render();
}
});
Непосредственное присвоение переменной не работает, поскольку я считаю, что она рассматривается как строка. Поэтому я хочу, чтобы data_option выглядел так, как указано в ссылке.
Редактировать 1
Мой массив PHP выглядит как
$output = Array
(
[question] => Lorem ipsum
[title] => Poll Result
[data_option] => [{ label: "BSP", y: 3 },{ label: "BJP", y: 10 },{ label: "Congress", y: 4 },{ label: "AAP", y: 1 },{ label: "SP", y: 2 },{ label: " SP", y: 1 }]
)
который я преобразовал в JSON и повторил.
echo json_encode($output);
Редактировать 2
Моя реальная структура кода
$poll_output_result['question'] = 'Lorem ipsum';
$poll_output_result['title'] = 'Poll Result';
$poll_output_result['data_option'] = '';
foreach($poll_result as $result){
$poll_output_result['data_option'] .= '{ label: "'.$result['user_choice'].'", y: '.$result['count'].' },';
}
$poll_output_result['data_option'] = trim($poll_output_result['data_option'], ',');
$poll_output_result['data_option'] = '['.$poll_output_result['data_option'].']';
echo json_encode($poll_output_result);
У меня есть массив в коде PHP, преобразованный в строку JSON.
но он не похож на стандартный JSON, например, с заключенными в кавычки ключами.
В PHP есть json_encode () и т. д.
@Noface тот же метод, который я использую для преобразования массива в формат json
Вы должны уточнить. По php предоставленный контент будет закодирован в JSON ---- заголовок ('Content-Type: application / json'); echo json_encode (array ('text' => 'omrele'));
@ Yanis-git Я тебя не понял.
Работает ли диаграмма при использовании закомментированного жестко закодированного массива dataPoints? На самом деле не понятно, в чем конкретная проблема
Да. Вы можете это увидеть в моем вопросе. Я добавил некоторое прокомментированное значение, которое является рабочим кодом.
Никогда не создавайте json вручную, как в обновленном PHP-коде. Просто сделайте $poll_output_result['data_option'] массивом



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Первоначальная проблема - вернуть ответ JSON из запроса ajax, вместо этого вы получите полный текст. Вот почему вам нужно JSON.parse вашего контента.
Чтобы указать тип ответа от вашего сервера, вы должны добавить правильный заголовок в свой ответ.
TODO, что в PHP:
//In top of your php file
header('Content-Type: application/json');
//[...]
echo json_encode($myArray);
ИЗМЕНИТЬ 1
Поскольку вы используете JSON_ENCODE, вам не нужно создавать собственный json, позвольте PHP сделать это за ваш. Замените свой код следующим:
$poll_output_result['question'] = 'Lorem ipsum';
$poll_output_result['title'] = 'Poll Result';
$poll_output_result['data_option'] = [];
foreach($poll_result as $result){
$poll_output_result['data_option'][] = [
'label' => $result['user_choice'],
'y' => $result['count']
];
}
echo json_encode($poll_output_result);
Но ответ JSON хорошо декодируется JSON.parse(html)
Я сомневаюсь, что ваш ключ data_option в вашем массиве PHP имеет строковый json как значение? или реальная структура PHP?
ОК. Позвольте мне добавить реальную структуру кода PHP в свой вопрос
почему бы не использовать строку, совместимую с JSON?