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.


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.

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.


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;

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

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

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
                )

        )

)

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++;
}

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


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.


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 }

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.


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;

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

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

echo $data;

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.