2012-08-31 15 views
6

Sto passando una stringa con codifica JSON a json_decode() e mi aspetto che il suo output sia un tipo di oggetto, ma sto ottenendo invece un tipo di stringa. Come posso restituire un oggetto?json_decode restituisce il tipo di stringa anziché l'oggetto

Nei documenti, il seguente restituisce un oggetto:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; 
var_dump(json_decode($json)); 

Tuttavia, se json_encode() la stringa e poi chiamo json_decode(), l'uscita è una stringa e non un oggetto:

$json = json_encode('{"a":1,"b":2,"c":3,"d":4,"e":5}'); 
var_dump(json_decode($json)); 

Questo è solo un esempio semplificato. In pratica quello che sto facendo è spingere una stringa con codifica JSON in PHP tramite AJAX. Tuttavia, illustra il problema della conversione di questa stringa JSON codificata in un oggetto che posso leggere in PHP, ad esempio "$json->a".

Come posso restituire un tipo di oggetto?

grazie per le risposte! L'attuale contesto per questa domanda stava usando una risposta JSON da un'API. Ma quando faccio il json_decode a questa risposta e provo ad accedere ai valori come - $ json = json_decode (json response from API); echo $ json-> un mi dà un errore: L'oggetto di classe stdClass non poteva essere convertito in stringa

+2

Perché vuoi per codificare un JSON già codificato? EX: '$ json = json_encode ('{" a ": 1," b ": 2," c ": 3," d ": 4," e ": 5}');'? – Cosmin

+6

Stai codificando una stringa, non un oggetto, quindi ovviamente otterrai una stringa quando la decodifichi. – Musa

+0

assolutamente giusto musa.! se passi una stringa di quanto potresti aspettarti per l'oggetto? –

risposta

4

La funzione json_encode è usato per codificare un oggetto PHP nativo o array in Formato JSON.

Ad esempio, $json = json_encode($arr) dove $arr è

$arr = array(
    'a' => 1, 
    'b' => 2, 
    'c' => 3, 
    'd' => 4, 
    'e' => 5, 
); 

restituirebbe la stringa $json = '{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}'. A questo punto, è necessario non necessario codificarlo di nuovo con json_encode!

Per ottenere indietro il proprio array, è sufficiente fare json_decode($json, true).

Se si omette l'true dalla chiamata alla json_decode otterrete un'istanza di stdClass invece, con le varie proprietà specificate nella stringa JSON.

Per ulteriori riferimenti, si veda:

http://www.php.net/manual/en/function.json-encode.php

http://www.php.net/manual/en/function.json-decode.php

+0

grazie per le risposte! Il contesto attuale per questa domanda stava usando una risposta JSON da un'API. Ma quando faccio il json_decode a questa risposta e provo ad accedere ai valori come - $ json = json_decode (json response from API); echo $ json-> a mi dà un errore: oggetto della classe stdClass non può essere convertito in stringa –

+0

Vedo .. potresti mostrarci la risposta JSON effettiva con cui stai lavorando? –

+0

ottenuto d problema! stava diventando double json_decoded quindi var_dump stava dando una stringa invece di un oggetto. –

0

Invece di scrivere su un array JSON, cercare di metterlo in un array PHP prima.

<?php 
$array = array(
'a' => 1, 
'b' => 2, 
'c' => 3, 
'd' => 4, 
'e' => 5 
); 
//Then json_encode() 
$json = json_encode($array); 
echo $json; 
die; 
?> 

In questo caso, si sta utilizzando unjax. Così, quando si ottiene un successo, si può fare questo:

$.ajax({ 
    url: 'example.com', 
    data: { 

    }, 
    success: function(data) { 
     console.log(data); 
    } 
}); 

Dove dopo che i dati all'interno console.log() possibile aggiungere il JSON var come data.a, data.b ...

Inoltre, con la stringa providedm non è necessario per json_encode dal momento che è alrady in formato JSON

Problemi correlati