2016-01-21 188 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