我怎么能JSON.parse数组内的嵌套对象

时间:2013-10-15 18:52:40

标签: javascript php ajax json

我正在尝试在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 Part:

$.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\" }";

6 个答案:

答案 0 :(得分:1)

你正在使用的Json是有效的,我在JSONLint检查了它,所以你的问题可能是序列化,只是确保你的“visitas”对象被正确序列化,因为问题可能正在发生,因为它是唯一的

中包含对象值的成员

答案 1 :(得分:0)

删除visitas数组周围的引号:

var json = JSON.parse('{"asn": "167","jte": "[[1381547700000,0.0], [1381548600000,0.0]]", "visitas": [{"x": "1380596400000", "text":"HELLOWORLD.","title":"X"}]}');

答案 2 :(得分:0)

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

如果你试图解析嵌套的JSON元素“visitas”,你可能会遇到一个问题:你的属性名称(例如x,text和title)没有用引号(​​“)括起来。这当然是因为你试图将visitas元素包含在一个字符串中,所以有点棘手。

解决方案可能是将visitas元素包含为适当的JSON元素。

答案 3 :(得分:0)

你需要逃避单引号。当你把它传递给JSON.parse时,我想你用单引号围绕上面的内容。

以下作品。

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

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

答案 4 :(得分: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);

});

答案 5 :(得分: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;