Piszę niestandardowe demo interfejsu API REST; teraz może zwracać liczby i ciągi w mojej wersji demonstracyjnej, ale chcę, aby zwrócił obiekt JSON, podobnie jak inne interfejsy API REST.
W mojej wersji demo wywołuję interfejs API Magento 2 (tj. Uzyskuję informacje o kliencie: http: //localhost/index.php/rest/V1/customers/1 ) za pomocą curl i zwraca ciąg JSON:
„{\" id \ ": 1, \" id_grupy \ ": 1, \" default_billing \ ": \" 1 \ ", \" Created_at \ ": \" 13.12.2016 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, \" address \ ": [{ \ "id \": 1, \ "ID_użytkownika \": 1, \ "region \": {\ "region_code \": \ "AR \", \ "region \": \ "Arad \", \ "region_id \ ": 279}, \" region_id \ ": 279, \" country_id \ ": \" RO \ ", \" street \ ": [\" abc \ "], \" telephone \ ": \" 111 \ ", \" kod pocztowy \ ": \"1111 \ ", \" city \ ": \" def \ ", \" firstname \ ": \" azol \ ", \" lastname \ ": \" young \ ", \" default_billing \ ": true}], \ "disable_auto_group_change \": 0} "
Odpowiedź jest ciągiem JSON, ale wszystkie klucze zawierają ukośnik. Wiem, że mogę usunąć ukośnik str_replace
, ale to głupi sposób. Czy istnieje inny sposób zwrócenia obiektu JSON bez ukośników w klawiszach?
************ AKTUALIZACJA 2016.12.27 ************
Wkleiłem tutaj mój kod testowy:
$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)
ireturn json_decode($json_string, true);
Odpowiedzi:
Możemy używać
json_encode
zJSON_UNESCAPED_SLASHES
:źródło
stripslashes()
funkcją lubjson_encode($str, JSON_UNESCAPED_SLASHES);
?Utwórz ws.php w katalogu głównym magento 2 i wklej poniższy kod w pliku:
Następnie uruchom ten plik za pomocą linku takiego jak http: //localhost/magento2/ws.php w przeglądarce i sprawdź dane wyjściowe.
źródło
Próbowałem użyć następującego skryptu, aby sprawdzić, czy otrzymuję ukośniki w tej samej odpowiedzi API:
Który powoduje tę odpowiedź (obciętą przez funkcję var_dump PHP):
Jak widać, w mojej odpowiedzi nie ma żadnych ukośników.
Proponuję więc dwie opcje:
str_replace
lub podobnego.Gdy otrzymasz odpowiedź bez ukośników, możesz użyć następującego wiersza, aby zmusić PHP do konwersji ciągu znaków na obiekt JSON:
źródło