Как преобразовать строку в объект массива

У меня проблема с преобразованием строки в объект массива.

Моя строка выглядит как [{ 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);

почему бы не использовать строку, совместимую с JSON?

Nina Scholz 24.03.2018 20:52

У меня есть массив в коде PHP, преобразованный в строку JSON.

PlanetHackers 24.03.2018 20:53

но он не похож на стандартный JSON, например, с заключенными в кавычки ключами.

Nina Scholz 24.03.2018 20:54

В PHP есть json_encode () и т. д.

George 24.03.2018 20:55

@Noface тот же метод, который я использую для преобразования массива в формат json

PlanetHackers 24.03.2018 20:56

Вы должны уточнить. По php предоставленный контент будет закодирован в JSON ---- заголовок ('Content-Type: application / json'); echo json_encode (array ('text' => 'omrele'));

Yanis-git 24.03.2018 20:57

@ Yanis-git Я тебя не понял.

PlanetHackers 24.03.2018 20:58

Работает ли диаграмма при использовании закомментированного жестко закодированного массива dataPoints? На самом деле не понятно, в чем конкретная проблема

charlietfl 24.03.2018 21:11

Да. Вы можете это увидеть в моем вопросе. Я добавил некоторое прокомментированное значение, которое является рабочим кодом.

PlanetHackers 24.03.2018 21:13

Никогда не создавайте json вручную, как в обновленном PHP-коде. Просто сделайте $poll_output_result['data_option'] массивом

charlietfl 24.03.2018 21:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
57
1

Ответы 1

Первоначальная проблема - вернуть ответ 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)

PlanetHackers 24.03.2018 21:06

Я сомневаюсь, что ваш ключ data_option в вашем массиве PHP имеет строковый json как значение? или реальная структура PHP?

Yanis-git 24.03.2018 21:07

ОК. Позвольте мне добавить реальную структуру кода PHP в свой вопрос

PlanetHackers 24.03.2018 21:09

Другие вопросы по теме