web-dev-qa-db-fra.com

Comment convertir une chaîne JSON en tableau

Ce que je veux faire est le suivant:

  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 une requête.

cela m obtenir à php de get of api cette chaîne json je veux passer à json mais il ne convertit pas 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.

96
XMen

Si vous transmettez le code JSON de votre publication à json_decode, le processus é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.
146
RikkusRukkus

Essaye ça:

$data = json_decode($your_json_string, TRUE);

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

76
sepidol

Si vous obtenez la chaîne JSON du formulaire à l'aide de $_REQUEST, $_GET ou $_POST, vous devrez utiliser la fonction html_entity_decode(). Je ne m'en suis rendu compte que lorsque j'ai fait un var_dump de ce qui était dans la demande par rapport à ce que j'ai copié dans une déclaration et une variable echo et que j'ai remarqué que la chaîne de requête était beaucoup plus grande.

Correct Way:

$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;
22
jbeauchamp

Utilisez la fonction json_decode($json_string, TRUE) 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.

===========

Sortie:

var_dump($my_array_data);

array(5) {

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

Si vous obtenez une chaîne json à partir d'une URL à l'aide de file_get_contents, procédez comme suit:

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

votre chaîne devrait ê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);

Sortie:

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

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

        )

)
4
Dinanath Thakur
<?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 s'ils ne sont pas des chiffres.

1
Pradeep Dhawan

Vous pouvez convertir json Object en 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
Manav Akela

Si vous avez besoin de convertir des fichiers JSON ou des structures 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 (ou la console) de votre navigateur les tableaux de style PHP corrects.

https://github.com/mobsted/jsontophparray

1
Denis Volkov

Vous pouvez modifier une chaîne en JSON comme suit et vous pouvez également couper, décaper sur 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
Shahrukh Anwar

ceci ma solution: 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}]"

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 }
0
Mourad MAMASSI

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);
0
Farhad Sakhaei

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

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

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

Ensuite, utilisez json_decode($response,true) pour le convertir en tableau.

0
unpokkolokko