Come convertire la stringa JSON in array


123

Quello che voglio fare è quanto segue:

  1. prendendo JSON come input dall'area di testo in php
  2. usa questo input e convertilo in JSON e passalo a php curl per inviare la richiesta.

sto ottenendo php da get of api questa stringa json voglio passare a json ma non viene convertita in array

echo $str='{
        action : "create",
        record: {
            type: "n$product",
            fields: {
                n$name: "Bread",
                n$price: 2.11
            },
            namespaces: { "my.demo": "n" }
        }
    }';
    $json = json_decode($str, true);

il codice sopra non mi restituisce array.


1
Hai bisogno di convertire la stringa JSON in array O vuoi forgiare un URL da quei dati? Qual è esattamente la domanda?
Janis Veinbergs

then it is not givingNon dare cosa? Prendi una stringa formattata JSON da textarea e la converti in JSON ???
PeeHaa

1
se esegui il json sopra nella mia domanda json_decode (, true) esegue nuovamente un array
XMen

@Pekka Per favore controlla di nuovo la mia domanda.
XMen

3
problema json non valido questo era.
XMen

Risposte:


187

Se passi il codice JSON nel tuo post a json_decode, fallirà. Le stringhe JSON valide hanno chiavi tra virgolette:

json_decode('{foo:"bar"}');         // this fails
json_decode('{"foo":"bar"}', true); // returns array("foo" => "bar")
json_decode('{"foo":"bar"}');       // returns an object, not an array.

se esegui il json sopra nella mia domanda json_decode (, true) esegue nuovamente un array
XMen

@RahulMehta Se stai usando il built-in di PHP, json_decode()verrà restituito NULLse il tuo JSON non è valido (ad esempio, nessuna chiave tra virgolette). Questo è ciò che dice la documentazione ed è ciò che restituisce la mia installazione di PHP 5.2. Stai usando una funzione diversa da quella ufficiale, integrata json_decode()? Cosa var_dump(json_decode($str, true));restituisce?
RickN

dopo json_encoding, vorrei leggere ogni singolo oggetto json, ad esempio {foo: "bar"} come un oggetto nell'array. come posso creare un array dai dati json_encoded per leggere ogni oggetto json? @RikkusRukkus
Manny265

@ Manny265 che suona come qualcosa che merita la sua domanda con (1) un codice di esempio, (2) cosa hai provato finora e (3) il risultato atteso, piuttosto che questa sezione di commenti.
RickN

96

Prova questo:

$data = json_decode($your_json_string, TRUE);

il secondo parametro renderà la stringa json decodificata in un array associativo.


30

Se hai trovato la stringa JSON dalla forma utilizzando $_REQUEST, $_GETo $_POSTla dovrete usare la funzione html_entity_decode(). Non me ne sono reso conto fino a quando non ho fatto una parte var_dumpdi ciò che era nella richiesta rispetto a ciò in cui ho copiato e echodichiarazione e ho notato che la stringa della richiesta era molto più grande.

Modo corretto:

$jsonText = $_REQUEST['myJSON'];
$decodedText = html_entity_decode($jsonText);
$myArray = json_decode($decodedText, true);

Con errori:

$jsonText = $_REQUEST['myJSON'];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;

2
Perfetto, funziona. quando ricevo i dati dalla funzione $ _POST json_last_error () era = a JSON_ERROR_SYNTAX. ma tutto andava bene. È stato un errore di decodifica non un errore di codifica come ascii o utf8. GRAZIE

11

Usa la json_decode($json_string, TRUE)funzione per convertire l'oggetto JSON in un array.

Esempio:

$json_string   = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

$my_array_data = json_decode($json_string, TRUE);

NOTA: il secondo parametro convertirà la stringa JSON decodificata in un array associativo.

===========

Produzione:

var_dump($my_array_data);

array(5) {

    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

6

Se stai ottenendo una stringa json dall'URL utilizzando file_get_contents, segui i passaggi:

$url = "http://localhost/rest/users";  //The url from where you are getting the contents
$response = (file_get_contents($url)); //Converting in json string
 $n = strpos($response, "[");
$response = substr_replace($response,"",0,$n+1);
$response = substr_replace($response, "" , -1,1);
print_r(json_decode($response,true));

6

la tua stringa dovrebbe essere nel seguente formato:

$str = '{"action": "create","record": {"type": "n$product","fields": {"n$name": "Bread","n$price": 2.11},"namespaces": { "my.demo": "n" }}}';
$array = json_decode($str, true);

echo "<pre>";
print_r($array);

Produzione:

Array
 (
    [action] => create
    [record] => Array
        (
            [type] => n$product
            [fields] => Array
                (
                    [n$name] => Bread
                    [n$price] => 2.11
                )

            [namespaces] => Array
                (
                    [my.demo] => n
                )

        )

)

2

Puoi convertire json Object in Array & String.

$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}';

$b=json_decode($data);

$i=0;
while($b->{'resultList'}[$i])
{
    print_r($b->{'resultList'}[$i]->{'displayName'});
    echo "<br />";
    $i++;
}

1

Se hai bisogno di convertire file o strutture JSON in array in stile PHP, con tutti i livelli di nidificazione, puoi utilizzare questa funzione. Per prima cosa, devi json_decode ($ yourJSONdata) e poi passarlo a questa funzione. Produrrà nella finestra del browser (o console) gli array in stile PHP corretti.

https://github.com/mobsted/jsontophparray


1
<?php
$str='{
    "action" : "create",
    "record" : {
                "type": "$product",
                "fields": {
                           "name": "Bread",
                           "price": "2.11"
                           },
                "namespaces": { "my.demo": "n" }
                }
    }';
echo $str;
echo "<br>";
$jsonstr = json_decode($str, true);
print_r($jsonstr);

?>

Penso che dovrebbe funzionare, è solo che anche le chiavi dovrebbero essere tra virgolette se non sono numeri.


1

questa la mia soluzione: json string $columns_validation = string(1736) "[{"colId":"N_ni","hide":true,"aggFunc":null,"width":136,"pivotIndex":null,"pinned":null,"rowGroupIndex":null},{"colId":"J_2_fait","hide":true,"aggFunc":null,"width":67,"pivotIndex":null,"pinned":null,"rowGroupIndex":null}]"

quindi uso json_decode due volte in questo modo:

$js_column_validation = json_decode($columns_validation);
$js_column_validation = json_decode($js_column_validation); 

var_dump($js_column_validation);

e il risultato è:

 array(15) { [0]=> object(stdClass)#23 (7) { ["colId"]=> string(4) "N_ni" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(136) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL } [1]=> object(stdClass)#2130 (7) { ["colId"]=> string(8) "J_2_fait" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(67) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL }

Grazie fratello ... mi hai salvato la giornata
Nuwan Withanage

1

Assicurati che la stringa sia nel seguente formato JSON, simile a questo:

{"result":"success","testid":"1"} (with " ") .

In caso contrario, puoi aggiungere i "responsetype => json"parametri della richiesta.

Quindi usa json_decode($response,true)per convertirlo in un array.


1
Benvenuto in StackOverflow :-) La comunità è sempre felice per i nuovi membri che vogliono contribuire e apprezza il tuo atteggiamento. Purtroppo un altro membro ha pensato che la tua risposta meritasse un voto negativo. Ciò potrebbe essere dovuto al fatto che la domanda stessa è stata posta circa sette anni fa ed è stata già risolta più volte. Inoltre la responseTypeproprietà viene utilizzata per determinare il tipo di dati nella risposta alla richiesta. Tuttavia il problema è che il corpo della richiesta contiene dati che non sono nel corretto fromat stesso. La tua risposta quindi non si adatta al contesto dato.
Philipp Maurer

1

Puoi cambiare una stringa in JSON come segue e puoi anche tagliare, strisciare sulla stringa se lo desideri,

$str     = '[{"id":1, "value":"Comfort Stretch"}]';
//here is JSON object
$filters = json_decode($str);

foreach($filters as $obj){
   $filter_id[] = $obj->id;
}

//here is your array from that JSON
$filter_id;

0

Usa questo convertitore, non fallisce affatto: Services_Json

// create a new instance of Services_JSON
$json = new Services_JSON();

// convert a complexe value to JSON notation, and send it to the browser
$value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
$output = $json->encode($value);
print($output);
// prints: ["foo","bar",[1,2,"baz"],[3,[4]]]

// accept incoming POST data, assumed to be in JSON notation
$input = file_get_contents('php://input', 1000000);
$value = $json->decode($input);

// if you want to convert json to php arrays:
$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);

-2
$data = json_encode($result, true);

echo $data;

2
Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo sul perché e / o come questo codice risponde alla domanda ne migliora il valore a lungo termine.
rollstuhlfahrer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.