需要将 JSON 解释为变量

Need to interpret JSON as variable

本文关键字:变量 解释 JSON      更新时间:2023-09-26

首先,对不起,我的英语不好。我有一个问题。我需要从 ajax 调用创建一个高图表。

这很完美:

chartOptions = { chart: {  renderTo: 'grafica1', type: 'area', },  series: [{ data: [1,2,3] }]};
chartprueba = new Highcharts.Chart(chartOptions);

我试图做的是一个带有消息或 json 响应的 ajax,如下所示:

"chart: { renderTo: 'grafica1', type: 'area', }, series: [{ data: [1,2,3] }]}"

所以我需要一种方法让 jQuery 解释它像代码一样不像字符串......

这是我的例子,但不起作用:

msg =  JSON.parse(msg);
chartOptions = msg;
chartprueba = new Highcharts.Chart(chartOptions);

因为chartOptions是一个字符串而不是一个对象...

此字符串

"chart: { renderTo: 'grafica1', type: 'area', }, series: [{ data: [1,2,3] }]}"

不是有效的 JSON。它没有左大括号,它有杂散的逗号,键没有引号。它甚至不是一个有效的javascript对象定义,但请检查json.org JSON施加的额外严格性。

编辑:根据您在其他地方的评论:

您是 JSON 编码字符串,而不是对象。 你想要的是类似的东西

$retorno = Array(
 chart => Array (renderTo =>'grafica1', type => 'area' ),
 series => Array(Array(data => Array(1,2,3)))
);
echo json_encode($retorno);

(如果我记得php语法正确的话)。

首先,您应该尝试更新服务器端资源,以将Object输出为有效的 JSON。

{ "chart": { "renderTo": "grafica1", "type": "area" }, ... }

然后,JSON.parse()应该没问题:

msg = JSON.parse(msg);

根据您的其他评论中的片段:

$retorno = " chart: { renderTo: 'grafica1', type: 'area', }, series: [{ data: [1,2,3] }]";
echo json_encode($retorno);
return; 

您可以使用 Michael Krelin(迈克尔·克雷林)的建议,在 array() s 中形成数据并对其进行编码:

$retorno = array(
    'chart' => array(
        'renderTo' => 'grafica1',
        'type' => 'area'
    ),
    'series' => array(
        array('data' => array(1, 2, 3))
    )
);
echo json_encode($retorno);
return;

PHP 中的关联数组(具有命名键的数组)将在 JSON 中编码为 Object s,而非关联数组将保持为 Array s。


否则,您将不得不eval() msg

msg = eval('(' + msg + ')');

如果输出缺少前导{,也添加它:

msg = eval('({' + msg + ')');

并且,括号强制将其作为表达式进行评估,因此{...}被视为Object文字而不是blocks

jQuery中有一个名为$.parseJSON的函数,这将返回一个对象,从数据创建。

因此,如果您有这样的 JSON:{'val1': 0}您可以运行 var data = $.parseJSON({'val1': 0}); ,这将使您能够通过对象获取值。

例如

data.val1

希望这有帮助,

和破折号; 席德

这是文档的链接