2016-01-21 127 views
1

我想将经度和纬度值传递给json文件。我目前使用的代码已经转义了数值并添加了引号。PHP转义经纬度和长坐标。

样品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"; 
    } 

回答

1

您正在编码两次。尝试改变

$jsonObject = json_encode($params); 

要简单

$jsonObject = $params; 

要删除引号,施放PHP字符串:

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

感谢它删除了反斜杠 - 我怎样才能去掉lat和long值上的双引号? – Simon

+0

我已经更新了我的答案。看看它是否有效。 –

+0

感谢它现在的作品。 – Simon

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两次..第一ü它编码为字符串,使反斜杠,然后再编码它。

+0

数据剧照包含doubble引号和反斜线,'{ “票”: “{\” LAT \ “:\” 51.5073509 \“,\”lng \“:\” - 0.12775829999998223 \“},{\”lat \“:\”51.5073509 \“,\”lng \“:\” - 0.12775829999998223 \“}”]}' – Simon

+0

Thanks for upadte这产生这样的:'{“votes”:[{“lat”:“51.5073509”,“lng”:“ - 0.12775829999998223”}]}' - 我怎样才能删除拉特和凌字符串的双引号? – Simon

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"; 
} 
+0

这产生这种结果:'{“votes”:[{“lat”:“51.5073509”,“lng”:“ - 0.12775829999998223”}]}' - 我怎样才能去掉lat和ling字符串的双引号? – Simon