Comment convertir une chaîne JSON en tableau

123

Ce que je veux faire, c'est ce qui suit:

  1. prendre JSON comme entrée de la zone de texte en php
  2. utilisez cette entrée et convertissez-la en JSON et transmettez-la à php curl pour envoyer la requête.

cela m arrive à php depuis get of api cette chaîne json que je veux passer à json mais ce n'est pas la conversion en tableau

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);

le code ci-dessus ne me renvoie pas de tableau.

X Men
la source
1
Avez-vous besoin de convertir une chaîne json en tableau OU voulez-vous forger une URL à partir de ces données? Quelle est exactement la question?
Janis Veinbergs
then it is not givingNe pas donner quoi? Vous prenez une chaîne au format JSON de textarea et vous la convertissez en JSON ???
PeeHaa
1
si vous faites le json ci-dessus dans ma question json_decode (, true) cela renvoie-t-il un tableau
XMen
@Pekka Veuillez vérifier à nouveau ma question.
XMen
3
problème json invalide c'était.
XMen

Réponses:

187

Si vous transmettez le JSON dans votre message à json_decode, cela échouera. Les chaînes JSON valides ont des clés entre guillemets:

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.
RickN
la source
si vous faites le json ci-dessus dans ma question json_decode (, true) cela renvoie-t-il un tableau
XMen
@RahulMehta Si vous utilisez PHP intégré, json_decode()il retournera NULLsi votre JSON n'est pas valide (par exemple, aucune clé entre guillemets). C'est ce que dit la documentation et c'est ce que mon installation PHP 5.2 renvoie. Utilisez-vous une fonction autre que la fonction intégrée officielle json_decode()? Qu'est-ce qui var_dump(json_decode($str, true));revient?
RickN le
après json_encoding, je voudrais lire chaque objet json individuel, par exemple {foo: "bar"} comme un objet dans le tableau. comment puis-je créer un tableau à partir des données json_encoded pour lire chaque objet json? @RikkusRukkus
Manny265
@ Manny265 cela ressemble à quelque chose qui mérite sa propre question avec (1) un exemple de code, (2) ce que vous avez essayé jusqu'à présent et (3) le résultat attendu, plutôt que cette section de commentaires.
RickN
96

Essaye ça:

$data = json_decode($your_json_string, TRUE);

le deuxième paramètre transformera la chaîne json décodée en tableaux associatifs.

sépidol
la source
30

Si vous obtenez la chaîne JSON de la forme à l' aide $_REQUEST, $_GETou $_POSTla , vous devrez utiliser la fonction html_entity_decode(). Je ne m'en suis pas rendu compte jusqu'à ce que j'aie fait un var_dumpde ce qui était dans la demande par rapport à ce que j'ai copié et la echodéclaration et j'ai remarqué que la chaîne de demande était beaucoup plus grande.

Bonne manière:

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

Avec des erreurs:

$jsonText = $_REQUEST['myJSON'];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;
jbeauchamp
la source
2
Parfait, cela fonctionne. quand j'obtiens des données de la fonction $ _POST json_last_error () was = to JSON_ERROR_SYNTAX. mais tout allait bien. C'était une erreur de décodage et non une erreur d'encodage comme ascii ou utf8. MERCI
11

Utilisez la json_decode($json_string, TRUE)fonction pour convertir l'objet JSON en tableau.

Exemple:

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

$my_array_data = json_decode($json_string, TRUE);

REMARQUE: Le deuxième paramètre convertira la chaîne JSON décodée en un tableau associatif.

===========

Production:

var_dump($my_array_data);

array(5) {

    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
Arslan Ramay
la source
6

Si vous obtenez une chaîne json à partir de l'URL à l'aide de file_get_contents, suivez les étapes:

$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));
piyush
la source
6

votre chaîne doit être au format suivant:

$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);

Production:

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

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

        )

)
Dinanath Thakur
la source
2

Vous pouvez convertir un objet json en tableau et chaîne.

$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++;
}
Manav Akela
la source
1

Si jamais vous avez besoin de convertir un fichier ou des structures JSON en tableaux de style PHP, avec tous les niveaux d'imbrication, vous pouvez utiliser cette fonction. Tout d'abord, vous devez json_decode ($ yourJSONdata), puis le transmettre à cette fonction. Il affichera dans la fenêtre de votre navigateur (ou console) les tableaux de style PHP corrects.

https://github.com/mobsted/jsontophparray

Denis Volkov
la source
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);

?>

Je pense que cela devrait fonctionner, c'est juste que les clés doivent également être entre guillemets si elles ne sont pas des chiffres.

Pradeep Dhawan
la source
1

voici ma solution: chaîne json $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}]"

donc j'utilise json_decode deux fois comme ça:

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

var_dump($js_column_validation);

et le résultat est:

 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 }
Mourad MAMASSI
la source
Thankz bro ... vous avez sauvé ma journée
Nuwan Withanage
1

Assurez-vous que la chaîne est au format JSON suivant, ce qui ressemble à ceci:

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

Sinon, vous pouvez ajouter "responsetype => json" vos paramètres de requête.

Utilisez ensuite json_decode($response,true)pour le convertir en tableau.

unpokkolokko
la source
1
Bienvenue sur StackOverflow :-) La communauté est toujours heureuse pour les nouveaux membres qui veulent y contribuer et apprécie votre attitude. Malheureusement, un autre membre pense que votre réponse mérite un vote défavorable. C'est peut-être parce que la question elle-même a été posée il y a environ sept ans et a déjà reçu une réponse à plusieurs reprises. De plus, la responseTypepropriété est utilisée pour déterminer le type des données dans la réponse à la demande. Pourtant, le problème est que le corps de la requête contient des données qui ne sont pas dans le bon fromat lui-même. Votre réponse ne correspond donc pas au contexte donné.
Philipp Maurer
1

Vous pouvez changer une chaîne en JSON comme suit et vous pouvez également couper, supprimer une chaîne si vous le souhaitez,

$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;
Shahrukh Anwar
la source
0

Utilisez ce convertisseur, il n'échoue pas du tout: 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);
Farhad Sakhaei
la source
-2
$data = json_encode($result, true);

echo $data;
Viktor
la source
2
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme.
rollstuhlfahrer