2013-07-05 26 views
28

Ho il seguente risultato di una query SQL:Convertire una stringa JSON oggetto PHP

{"Coords":[ 
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"} 
    ] 
} 

Attualmente è una stringa in php, c'è un modo semplice per convertire questo in un oggetto JSON (lo so è già in forma JSON).

ho bisogno di essere un oggetto in modo da poter aggiungere un elemento/elemento/oggetto più simile a quello che già è Coords

EDIT: Scusate ragazzi, ho incollato UN VECCHIO/STRING SBAGLIATO!

+12

Questo non è JSON valido. Avrai difficoltà a convertire questo in qualcosa. – deceze

+0

@deceze cosa non lo è? – user2363025

+7

@ user2363025 controlla su http://jsonlint.com/ –

risposta

61

che @deceze detto è corretto, sembra che il vostro JSON non è corretto, provate questo:

{ 
    "Coords": [{ 
     "Accuracy": "30", 
     "Latitude": "53.2778273", 
     "Longitude": "-9.0121648", 
     "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778273", 
     "Longitude": "-9.0121648", 
     "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778273", 
     "Longitude": "-9.0121648", 
     "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778339", 
     "Longitude": "-9.0121466", 
     "Timestamp": "Fri Jun 28 2013 11:45:54 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778159", 
     "Longitude": "-9.0121201", 
     "Timestamp": "Fri Jun 28 2013 11:45:58 GMT+0100 (IST)" 
    }] 
} 

Usa json_decode($string) per convertire stringa in Array/Oggetto (stdClass): http://php.net/manual/en/function.json-decode.php

[a cura]

non ho capito cosa intendi per "un oggetto JSON ufficiale", ma suppongo vuoi aggiungere contenuti a json via PHP e poi riconvertirli a JSON?

ammesso che abbiate la seguente variabile:

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}'; 

Si dovrebbe convertirlo in Array/Oggetto (stdClass):

$manage = json_decode($data);

Ma lavorare con stdClass è più complicata di PHP -Array, quindi prova questo:

$manage = (array) json_decode($data);

questo modo è possibile utilizzare funzioni di matrice: http://php.net/manual/en/function.array.php

Aggiunta di un elemento:

$manage = (array) json_decode($data); 

echo 'Before: <br>'; 
print_r($manage); 

$manage['Coords'][] = Array(
    'Accuracy' => '90' 
    'Latitude' => '53.277720488429026' 
    'Longitude' => '-9.012038778269686' 
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)' 
); 

echo '<br>After: <br>'; 
print_r($manage); 

rimuovere prima voce:

$manage = (array) json_decode($data); 
echo 'Before: <br>'; 
print_r($manage); 
array_shift($manage['Coords']); 
echo '<br>After: <br>'; 
print_r($manage); 

alcuna possibilità che si desidera salvare json a un database o un file di :

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}'; 

$manage = (array) json_decode($data); 

$manage['Coords'][] = Array(
    'Accuracy' => '90' 
    'Latitude' => '53.277720488429026' 
    'Longitude' => '-9.012038778269686' 
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)' 
); 

if(($id = fopen('datafile.txt','w'))){ 
    fwrite($id,json_encode($manage)); 
    fclose($id); 
} 

spero di aver capito la tua domanda.

Buona fortuna.

+0

grazie per l'aiuto costruttivo – user2363025

+2

json_decode ha fatto il trucco .. grazie – zeetit

+0

Grazie a te che mi hai tirato fuori i capelli dal motivo per cui l'array che sto spingendo a un altro array viene mostrato come una stringa invece di un oggetto. –

0

Provare con json_encode().

E guarda di nuovo Valid JSON

+3

Per favore controlla questo: http://w3fools.com/ – Dan

10

Per convertire una stringa JSON valida indietro, è possibile utilizzare il metodo json_decode().

Per convertire nuovamente ad un uso oggetto questo metodo:

$jObj = json_decode($jsonString); 

E per convertirlo in un array associativo, impostare il secondo parametro true:

$jArr = json_decode($jsonString, true); 

proposito convertire la tua stringa menzionata torna a uno di questi, dovresti avere una stringa JSON valida. Per realizzarlo, è necessario effettuare le seguenti operazioni:

  1. Nell'array Coords, rimuovere i due " (virgolette doppie) dal inizio e la fine dell'oggetto.
  2. Gli oggetti in un array sono virgole seprated (,), in modo da aggiungere le virgole tra gli oggetti nella matrice Coords ..

e si avrà un JSON String valido ..

Ecco il vostro JSON String ho convertito in uno valido: http://pastebin.com/R16NVerw

3

è possibile utilizzare

$array = json_decode($sting,true) 

ma convalidare l'JSON prima. È possibile convalidare da http://jsonviewer.stack.hu/

Problemi correlati