如何将字符串转换为数组对象

时间:2018-03-24 19:51:53

标签: javascript jquery canvasjs

我将字符串转换为数组对象时遇到问题。

我的字符串看起来像[{ 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);

1 个答案:

答案 0 :(得分:-1)

你原来的问题是从ajax请求返回JSON答案,而是你收到plein文本。这就是为什么你必须JSON.parse你的内容。

要从服务器指定答案类型,您必须在答案中添加正确的标题。

在PHP中的TODO:

//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);