Was ich tun möchte, ist folgendes:
dieses m bekommen bei PHP von get of api diese json-string, die ich an json übergeben möchte, aber es konvertiert nicht 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);
der obige Code gibt kein Array zurück.
Wenn Sie die JSON in Ihrem Beitrag an json_decode
übergeben, schlägt dies fehl. Gültige JSON-Zeichenfolgen haben Schlüssel in Anführungszeichen:
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.
Versuche dies:
$data = json_decode($your_json_string, TRUE);
mit dem zweiten Parameter wird decodierter Json-String zu assoziativen Arrays.
Wenn Sie den JSON-String mit $_REQUEST
, $_GET
oder $_POST
aus dem Formular abrufen, müssen Sie die Funktion html_entity_decode()
verwenden. Ich wusste dies nicht, bis ich einen var_dump
von dem, was in der Anfrage enthalten war, und dem, was ich in eine echo
-Anweisung kopierte, ausführte und bemerkte, dass die Anforderungszeichenfolge viel größer war.
Der richtige Weg:
$jsonText = $_REQUEST['myJSON'];
$decodedText = html_entity_decode($jsonText);
$myArray = json_decode($decodedText, true);
Mit Fehlern:
$jsonText = $_REQUEST['myJSON'];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;
Verwenden Sie die Funktion json_decode($json_string, TRUE)
, um das JSON-Objekt in ein Array zu konvertieren.
Beispiel:
$json_string = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
$my_array_data = json_decode($json_string, TRUE);
HINWEIS: Der zweite Parameter konvertiert dekodierte JSON-Zeichenfolge in ein assoziatives Array.
===========
Ausgabe:
var_dump($my_array_data);
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
Wenn Sie mit file_get_contents
einen json-String von der URL erhalten, führen Sie die folgenden Schritte aus:
$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));
ihre Zeichenfolge sollte das folgende Format haben:
$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);
Ausgabe:
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);
?>
ich denke, das sollte funktionieren, es ist nur so, dass die Schlüssel auch in doppelte Anführungszeichen gesetzt werden sollten, wenn sie keine Ziffern sind.
$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++;
}
Wenn Sie JSON-Dateien oder -Strukturen in Arrays im PHP-Stil mit allen Verschachtelungsebenen konvertieren müssen, können Sie diese Funktion verwenden. Zuerst müssen Sie json_decode ($ yourJSONdata) und dann an diese Funktion übergeben. In Ihrem Browserfenster (oder der Konsole) werden die korrekten Arrays PHP ausgegeben.
Sie können eine Zeichenfolge wie folgt in JSON ändern.
$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;
dies meine Lösung: 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}]"
also benutze ich json_decode zweimal so:
$js_column_validation = json_decode($columns_validation);
$js_column_validation = json_decode($js_column_validation);
var_dump($js_column_validation);
und das Ergebnis ist:
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 }
Verwenden Sie diesen Konverter. Er schlägt überhaupt nicht fehl: 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);
Stellen Sie sicher, dass die Zeichenfolge im folgenden JSON-Format vorliegt.
{"result":"success","testid":"1"} (with " ") .
Wenn nicht, können Sie "responsetype => json"
in Ihre Anfrage-Parameter einfügen.
Verwenden Sie dann json_decode($response,true)
, um es in ein Array zu konvertieren.