PHP转义lat和long坐标。

时间:2016-01-21 14:45:12

标签: php json

我想将经度和纬度值传递给json文件。我当前的代码转义了值并添加了引号。

示例json输出{"votes":["{\"lat\":\"51.426799\",\"lng\":\"-0.3313419999999496\"},{\"lat\":\"52.30897\",\"lng\":\"-1.9409359999999651\"}"]}

我需要删除反斜杠和引号。这是我正在使用的PHP:

    if (isset($_POST['lat']) && isset($_POST['lng'])) {
        $params = array('lat' => $_POST['lat'], 'lng' => $_POST['lng']);

        $jsonObject = json_encode($params);
        $json = file_get_contents('my_json_data.json');
        if(empty($json)){
            $jsonObject = json_encode(array('votes' => [$jsonObject]));
            file_put_contents('my_json_data.json', $jsonObject);
        }else{
            $json = json_decode($json, true);
            $newJson = $json['votes'][0] . "," . $jsonObject;
            $jsonObject = json_encode(array('votes' => [$newJson]));
            file_put_contents('my_json_data.json', $jsonObject);
        }
    }
    else {
        echo "Noooooooob";
    }

3 个答案:

答案 0 :(得分:1)

你要编码两次。尝试更改

$jsonObject = json_encode($params);

简单地

$jsonObject = $params;

要删除引号,请转换PHP字符串:

$params = array('lat' => (float)$_POST['lat'], 'lng' => (float)$_POST['lng']);

答案 1 :(得分:0)

if (isset($_POST['lat']) && isset($_POST['lng'])) {
    $params = array('lat' => $_POST['lat'], 'lng' => $_POST['lng']);

    $json = file_get_contents('my_json_data.json');
    if(empty($json)){
        $params["votes"] = 1;
        $jsonObject = json_encode(array('votes' => $params));
        file_put_contents('my_json_data.json', $jsonObject);
    }else{
        $json = json_decode($json, true);
        $newJson = $json['votes']++;
        $jsonObject = json_encode($json);
        file_put_contents('my_json_data.json', $jsonObject);
    }
}
else {
    echo "Noooooooob";
}

尝试重置my_json_data.json文件..

edit1:好的,你正在使用json_encode两次..首先你将它编码为生成反斜杠的字符串,然后再对其进行编码..

答案 2 :(得分:0)

你编码$ params两次。

首先:$jsonObject = json_encode($params);所以$ jsonObject包含一个json编码的$ params(作为字符串)

将此字符串放入投票数组之后:

$jsonObject = json_encode(array('votes' => [$jsonObject]));

或在这里

$newJson = $json['votes'][0] . "," . $jsonObject;

再次将其编码为字符串,而不是数组:

$jsonObject = json_encode(array('votes' => [$newJson]));

我想你想要这样做:

if (isset($_POST['lat']) && isset($_POST['lng'])) {
    $params = array('lat' => $_POST['lat'], 'lng' => $_POST['lng']);

    $json = @file_get_contents('my_json_data.json');
    if(empty($json)){
        $jsonObject = json_encode(array('votes' => [$params]));
        file_put_contents('my_json_data.json', $jsonObject);
    }else{
        $json = json_decode($json, true);
        $json['votes'][] = $params;
        file_put_contents('my_json_data.json', json_encode($json));
    }
}
else {
    echo "Noooooooob";
}