-2

我正在尝试在 PHP/Ajax 响应中传递此结构:

{"asn":"167", "jte":"[[1381547700000,0.0], [1381548600000,0.0]]", "visitas":"[{x:1380596400000,text:'HELLO WORLD.',title:'X'}]"}

但是 JSON.parse 返回错误。

SyntaxError: JSON.parse: expected property name or '}'

没有“visitas”对象,一切都运行良好。可以这样“嵌套”吗?

更新:

阿贾克斯部分:

$.ajax({
                    type: 'post', 
                    url: 'cxxx.php',
                    data: { asn: asn }, 
                    success: function(p){
                        p = JSON.parse(p);

                        jusante=JSON.parse(p.jusante);
                        montante=JSON.parse(p.montante);
                        vazao=JSON.parse(p.vazao);
                        minima=JSON.parse(p.minima);
                        fator=JSON.parse(p.fator);
                        visitas=JSON.parse(p.visitas)

和 PHP 部分:

    $v="[";
while(odbc_fetch_row($res)){
    $datavisita = odbc_result($res, "DATA_VISITA");
    $descricaovisita = odbc_result($res, "DESCRICAO_VISITA");
    $login = odbc_result($res, "LOGIN");
    $descricaomotivo = odbc_result($res, "DESCRICAO_MOTIVO");
    $id_motivo=odbc_result($res, "ID_MOTIVO");

    $datavisita=date("U", strtotime($datavisita))*1000;
    $descricaovisita=preg_replace("/\r|\n/", "", $descricaovisita);

    $v.="{x:$datavisita,text:'$descricaovisita',title:'$id_motivo'}, ";
}
$v=rtrim($v,", ")."]";


echo "{\"asn\": \"$asn\", \"description\": \"$description\", \"jusante\": \"$o\", \"montante\": \"$m\", \"vazao\": \"$f\", \"minima\": \"$mn\", \"fator\": \"$fp\", \"visitas\": \"$v\" }";
4

6 回答 6

1

您使用的 Json 是有效的,我在JSONLint上检查了它,所以您的问题可能与序列化有关,只需确保您的“visitas”对象已正确序列化,因为问题可能正在发生,因为它是唯一具有内部对象值的成员

于 2013-10-15T18:58:49.813 回答
0

visitas删除数组周围的引号:

var json = JSON.parse('{"asn": "167","jte": "[[1381547700000,0.0], [1381548600000,0.0]]", "visitas": [{"x": "1380596400000", "text":"HELLOWORLD.","title":"X"}]}');
于 2013-10-15T19:01:55.637 回答
0

虽然最外面的 JSON 对象看起来不错,但嵌套的对象可能有问题!

如果您尝试解析嵌套的 JSON 元素“visitas”,您可能会遇到问题,因为您的属性名称(例如 x、文本和标题)没有用引号 (") 括起来。这当然有点棘手因为您试图将 visitas 元素作为字符串包含在内。

一种解决方案可能是将 visitas 元素作为适当的 JSON 元素包含在内。

于 2013-10-15T19:02:43.247 回答
0

您需要转义单引号。我想当您将上面的内容传递给 JSON.parse 时,您会将其括在单引号中。

下面的作品。

JSON.parse('{"asn":"167", "jte":"[[1381547700000,0.0], [1381548600000,0.0]]", "visitas":"[{x:1380596400000,text:\'HELLO WORLD.\',title:\'X\'}]"}');

注意字符串中单引号前的斜线。

于 2013-10-15T19:04:03.097 回答
0

我会做以下事情:

var jsondata = {
                    "asn": "167",
                    "jte": "[[1381547700000,0.0], [1381548600000,0.0]]",
                    "visitas": "[{x:1380596400000,text:'HELLO WORLD.',title:'X'}]"
                };

jsondata = JSON.stringify(jsondata);

然后发送到 php

var postdata = { data : jsondata};
var url = "<?php echo base_url(); ?>"+"test";


$.post(url, postdata, function(result){

    console.log(result);

});
于 2013-10-15T19:19:57.010 回答
0

因为您的 php 结果以错误的方式回显,您应该首先修复它。创建数组,以便您可以轻松使用 JSON_ENCODE 函数,如下所示:

$array = array(
            "asn" => "test_asn",
            "description" => "description_test",
            "jusante" => "jusante_test",
            "montante" => "montante_test",
            "vazao" => "vazao_test",
            "minima" => "minima_test",
            "fator" => "fator_test",
            "visitas" => "visitas_test"
            );
 $json = json_encode($array);
 echo $json;
于 2013-10-15T19:55:00.630 回答