Я пишу пользовательскую демонстрацию REST API; теперь он может возвращать числа и строки в моей демонстрации, но я хочу, чтобы он возвращал объект JSON, как и другие API REST.
В моей демонстрации я вызываю API Magento 2 (т.е. получаю информацию о клиенте: http: //localhost/index.php/rest/V1/customers/1 ) с помощью curl, и он возвращает строку JSON:
"{\" id \ ": 1, \" group_id \ ": 1, \" default_billing \ ": \" 1 \ ", \" creation_at \ ": \" 2016-12-13 14: 57: 30 \ " , \ "updated_at \": \ "2016-12-13 15:20:19 \", \ "creation_in \": \ "Представление хранилища по умолчанию \", \ "электронная почта \": \ "75358050@qq.com \ », \ "Имя \": \ "азол \", \ "Lastname \": \ "молодой \", \ "store_id \": 1, \ "website_id \": 1, \ "адреса \": [{ \ "идентификатор \": 1, \ "customer_id \": 1, \ "область \": {\ "region_code \": \ "АР \", \ "область \": \ "Арада \", \ "Region_ID \ ": 279}, \" Region_ID \ ": 279, \" country_id \ ": \" RO \ "\ "улица \": [\ "а \"], \ "телефон \": \" 111 \ "\ "почтовый индекс \": \"1111 \», \ "город \": \ "Защита \", \ "Имя \": \ "азол \", \ "Lastname \": \ "молодой \", \ "default_billing \": истинно}], \ "disable_auto_group_change \": 0}»
Ответом является строка JSON, но внутри всех ключей есть косая черта. Я знаю, что могу удалить косую черту str_replace
, но это глупо. Есть ли другой способ вернуть объект JSON без слешей внутри ключей?
************ ОБНОВЛЕНИЕ 2016.12.27 ************
Я вставил свой тестовый код здесь:
$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\":\"75358050@qq.com\",\"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)
иreturn json_decode($json_string, true);
Ответы:
Мы можем использовать
json_encode
сJSON_UNESCAPED_SLASHES
:источник
stripslashes()
функцией илиjson_encode($str, JSON_UNESCAPED_SLASHES);
?Создайте ws.php в корневом каталоге magento 2 и вставьте следующий код в файл:
После этого запустите этот файл, используя ссылку вроде http: //localhost/magento2/ws.php в браузере, и проверьте вывод.
источник
Я попытался использовать следующий скрипт, чтобы проверить, получаю ли я косую черту в том же ответе API:
Который производит этот ответ (усеченный функцией var_dump в PHP):
Как видите, в моем ответе нет косых черт.
Поэтому я предлагаю вам два варианта:
str_replace
или подобное.Получив ответ без косой черты, вы можете использовать следующую однострочную строку, чтобы заставить PHP преобразовать строку в объект JSON:
источник