Ce que je veux faire est le suivant:
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.
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.
Essaye ça:
$data = json_decode($your_json_string, TRUE);
le second paramètre transformera la chaîne json décodée en tableaux associatifs.
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;
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)
}
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));
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
)
)
)
<?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.
$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++;
}
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.
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;
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 }
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);
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.