Ich schreibe eine benutzerdefinierte REST-API-Demo. Jetzt kann es Zahlen und Zeichenfolgen in meiner Demo zurückgeben, aber ich möchte, dass es ein JSON-Objekt wie andere REST-APIs zurückgibt.
In meiner Demo rufe ich die Magento 2-API mit curl auf (dh erhalte Kundeninformationen: http: //localhost/index.php/rest/V1/customers/1 ) und gibt einen JSON-String zurück:
{"id": 1, "group_id": 1, "default_billing": "1", "created_at": "2016-12-13 14: 57: 30" , "updated_at": "2016-12-13 15:20:19", "created_in": "Default Store View", "email": "[email protected]" "," Vorname ":" Azol "," Nachname ":" Young "," Store-ID ": 1," Website-ID ": 1," Adressen ": [{ "id": 1, "customer_id": 1, "region": {"region_code": "AR", "region": "Arad", "region_id" ": 279}," Regions-ID ": 279," Länder-ID ":" RO "," Straße ": [" abc "]," Telefon ":" 111 " "," Postleitzahl ":"1111 "," Stadt ":" def "," Vorname ":" Azol "," Nachname ":" jung "," Standardabrechnung ": true}], "disable_auto_group_change": 0} "
Die Antwort ist eine JSON-Zeichenfolge, aber alle Schlüssel enthalten einen Schrägstrich. Ich weiß, dass ich den Schrägstrich mit entfernen kann str_replace
, aber es ist ein dummer Weg. Gibt es eine andere Möglichkeit, ein JSON-Objekt ohne Schrägstriche in Schlüsseln zurückzugeben?
************ UPDATE 2016.12.27 ************
Ich habe meinen Testcode hier eingefügt:
$method = 'GET';
$url = 'http://localhost/index.php/rest/V1/customers/1';
$data = [
'oauth_consumer_key' => $this::consumerKey,
'oauth_nonce' => md5(uniqid(rand(), true)),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_token' => $this::accessToken,
'oauth_version' => '1.0',
];
$data['oauth_signature'] = $this->sign($method, $url, $data, $this::consumerSecret, $this::accessTokenSecret);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => [
'Authorization: OAuth ' . http_build_query($data, '', ','),
'Content-Type: application/json'
],
]);
$result = curl_exec($curl);
curl_close($curl);
// this code has slash still
//return stripslashes("hi i\" azol");
// has slashes still
//return stripcslashes("{\"id\":1,\"group_id\":1,\"default_billing\":\"1\",\"created_at\":\"2016-12-13 14:57:30\",\"updated_at\":\"2016-12-13 15:20:19\",\"created_in\":\"Default Store View\",\"email\":\"[email protected]\",\"firstname\":\"azol\",\"lastname\":\"young\",\"store_id\":1,\"website_id\":1,\"addresses\":[{\"id\":1,\"customer_id\":1,\"region\":{\"region_code\":\"AR\",\"region\":\"Arad\",\"region_id\":279},\"region_id\":279,\"country_id\":\"RO\",\"street\":[\"abc\"],\"telephone\":\"111\",\"postcode\":\"1111\",\"city\":\"def\",\"firstname\":\"azol\",\"lastname\":\"young\",\"default_billing\":true}],\"disable_auto_group_change\":0}");
// has slashes still
//return json_encode(json_decode($result), JSON_UNESCAPED_SLASHES);
// this code will throw and expcetion:
// Undefined property: *****\*****\Model\Mycustom::$_response
//return $this->_response->representJson(json_encode($data));
return $result;
return json_encode($result, JSON_UNESCAPED_SLASHES);
?$json_string = stripslashes($result)
undreturn json_decode($json_string, true);
Antworten:
Wir können
json_encode
mit verwendenJSON_UNESCAPED_SLASHES
:quelle
stripslashes()
funktion versucht oderjson_encode($str, JSON_UNESCAPED_SLASHES);
?Erstellen Sie ws.php im Stammverzeichnis von Magento 2 und fügen Sie den folgenden Code in die Datei ein:
Danach starte diese Datei mit einem Link wie http: //localhost/magento2/ws.php im Browser und überprüfe die Ausgabe.
quelle
Ich habe versucht, mithilfe des folgenden Skripts zu testen, ob in derselben API-Antwort Schrägstriche angezeigt werden:
Wodurch wird diese Antwort erzeugt (abgeschnitten von der var_dump-Funktion von PHP):
Wie Sie sehen, keine Schrägstriche in meiner Antwort.
Ich schlage vor, Sie haben zwei Möglichkeiten:
str_replace
o.ä. zu entfernen .Sobald Sie Ihre Antwort ohne Schrägstriche erhalten haben, können Sie mit der folgenden einzeiligen Anweisung PHP zwingen, die Zeichenfolge in ein JSON-Objekt zu konvertieren:
quelle