PHP-массив в json, как избавиться от некоторых двойных кавычек?

У меня небольшая, но странная проблема при кодировании массивов php в json.

Мне нужно запретить array() добавлять двойные кавычки вокруг определенных значений.

Вот массив php:

$coordinates="[".$row["lat"].",".$row["lng"]."]";  
$egUser=array(              

            "geometry"=>array(
                "type"=>"$type",
                "coordinates"=>$coordinates                 
        ),

            "type2"=>"$type2",
            "id"=>$id
        );
$arrayjson[]=$egUser;   

Который возвращает следующий json с json_encode :

var member = {
"type": "FeatureCollection",
"features": [{
    "geometry": {
        "type": "Point",
        "coordinates": "[46.004028,5.040131]"
    },
    "type2": "Feature",
    "id": "39740"
}]

};

Как видите, координаты заключены в двойные кавычки >

"coordinates": "[46.004028,5.040131]"

Как избавиться от этих цитат? Вместо этого мне нужно иметь следующее >

"coordinates": [46.004028,5.040131]

Я немного запутался, поэтому любая помощь приветствуется :) Спасибо!


person Olivier    schedule 13.06.2012    source источник


Ответы (1)


Это потому, что $coordinates имеет тип String.

$coordinates="[".$row["lat"].",".$row["lng"]."]";

Создайте $coordinates вот так

$coordinates = array($row["lat"],$row["lng"]);
person Josnidhin    schedule 13.06.2012
comment
+1, также обратите внимание, что если вы используете PHP 5.4+, вы можете использовать синтаксис сокращенного массива, чтобы объявить его точно так же, как в Javascript: $coordinates = [$row["lat"], $row["lng"]]; - person DaveRandom; 13.06.2012
comment
Действительно, json_encode пытается определить тип, так как в основном примере тип является строкой, он добавляет кавычки вокруг него, если вы примените то, что только что было сказано выше, вы получите массив, который вы ищете - person PEM; 13.06.2012
comment
он возвращает "coordinates": ["46.004028", "5.040131"], теперь у меня есть кавычки вокруг чисел! - person Olivier; 13.06.2012
comment
это означает, что $row[lat] и $row[lng] также возвращают строку, преобразованную в float, и кавычки исчезнут php.net/manual/en/function.floatval.php - person Josnidhin; 13.06.2012
comment
@Оливье Попробуй $coordinates = array((float) $row["lat"], (float) $row["lng"]); - person DaveRandom; 13.06.2012
comment
Спасибо! Я пробовал с intval(), но (float) правильный :) - person Olivier; 13.06.2012