在PHP中解析一堆JSON对象

时间:2013-03-31 17:19:39

标签: php json parsing

我想在PHP中解析以下一堆JSON对象。但在某种程度上,这是行不通的。

[
{"latitute":16.8045558404827,"longitude":36.9140487536788,
    "missionid":0,"status":0,"waypointid":0},
{"latitute":-14.093939943107658,"longitude":21.093734242022038,
    "missionid":0,"status":0,"waypointid":0}
]

$obj = json_decode($_POST["waypoints"]);


foreach ($json->items as $item) {

    echo($item->{'longitude'});
    echo($item->{'latitude'});
    echo($item->{'missionid'});
    $query="INSERT INTO dio.wpoint (longitude, latitude, missionid, status, ) VALUES ("$item->{'longitude'}.","$item->{'latitude'}.",41)";
    mysql_query($query);    

}

2 个答案:

答案 0 :(得分:2)

据我所知,Mysql不允许使用尾随逗号。

INSERT INTO dio.wpoint (longitude, latitude, missionid, status, )

应该是

INSERT INTO dio.wpoint (longitude, latitude, missionid, status)

答案 1 :(得分:1)

您在foreach循环中使用$json作为变量,而不是$obj。您也不需要引用成员items,因为它在您的JSON中不存在。

在查询中只有三个值存在,当应该有四个与列名匹配时 - 我不确定您在查询中确切想要的值,但我做了一个有根据的猜测。

$obj = json_decode($_POST["waypoints"]);

foreach ($obj as $item) {
    echo $item->{'longitude'};
    echo $item->{'latitude'};
    echo $item->{'missionid'};

    $query="INSERT INTO dio.wpoint (longitude, latitude, missionid, status)
            VALUES (" . $item->{'longitude'} . ", " .
                        $item->{'latitude'} . ", " .
                        $item->{'missionid'} . ", " .
                        $item->{'status'} .
                   ")";
    mysql_query($query);    
}

正如评论中所提到的,拼写中存在一些不一致的问题。根据您的PHP版本,mysql_query可能已被弃用,因此值得研究替代方案,例如MySQLiPDO。您的查询也可能容易受到SQL注入攻击,阅读How to prevent SQL injection in PHP?应提供指导。