2011-04-03 5 views
2

J'ai une chaîne JSON qui a 1-n nombres d'enregistrements lat/lng. Il ressemble à ceci:Comment analyser une chaîne JSON en utilisant PHP

{\"lat\":37.790388261934424,\"lng\":-122.46047996826172},{\"lat\":37.789608231530124,\"lng\":-122.46344112701416} 

Qu'est-ce qu'un bon moyen d'analyser cette boucle pour obtenir lat/valeurs lng? Et les doubles guillemets échappés ont-ils un impact sur l'analyse syntaxique?

Merci, Alex

+1

essayer [json_decode] (http://php.net/manual/en/function.json-decode.php) – ysrb

+1

Pourquoi ne possède ces barres obliques en il?? – lucifurious

+0

Parce qu'il est entouré de guillemets doubles. –

Répondre

5
$ll = '[{"lat":37.790388261934424,"lng":-122.46047996826172},{"lat":37.789608231530124,"lng":-122.46344112701416}]'; 
$ll = json_decode($ll); 
print_r($ll); 

tirages ...

Array 
(
    [0] => stdClass Object 
     (
      [lat] => 37.7903882619 
      [lng] => -122.460479968 
     ) 

    [1] => stdClass Object 
     (
      [lat] => 37.7896082315 
      [lng] => -122.463441127 
     ) 

) 
5

Utilisez json_decode.

Vous devrez d'abord Unescape devis; il suffit d'utiliser

$unescaped_data = str_replace('\"','"',$data) 
3

Dans votre cas, il est préférable d'utiliser probablement:

$array = json_decode(stripslashes("[$input_string]"), 1); 

Notez que vous perdrez une précision sur vos valeurs flottantes en PHP.

+0

Y a-t-il un moyen de préserver la précision des valeurs float dans PHP avec cette opération? Les valeurs flottantes sont assez importantes. – Genadinik

+0

S'il l'a enveloppé entre guillemets, il n'a pas besoin d'échapper à la chaîne. Son JSON manque '[]' autour de '{}, {}' comme vous l'avez montré. @Genadinik, 9 décimales ne sont pas assez pour Lat et Lon? –

+0

@Genadinik: Pas avec json_decode. Et vous ne pouvez pas gérer des nombres plus précis en PHP, il ne connaît que float. La précision perdue est minime, et je soupçonne en fait que la représentation Javascript n'est pas trop précise non plus. (Une solution de contournement impliquerait l'analyse manuelle et l'utilisation des fonctions gmp pour toutes les coordonnées: http://www.php.net/manual/fr/ref.gmp.php - dans l'ensemble de votre application.) – mario

Questions connexes