【问题标题】:Explicitely returning escaped JSON response vs just returning array in Laravel/PHP明确返回转义的 JSON 响应与仅在 Laravel/PHP 中返回数组
【发布时间】:2017-05-03 17:46:12
【问题描述】:

如果我比较 Laravel 的 5.25.3 文档,5.3 文档似乎鼓励只返回一个包含数据的数组,该数据将自动转换为 JSON 响应(内容类型为 "application /json")。我注意到从控制器返回一个数组,将返回未转义的 JSON。

return ['country_id' => $countryId, 'iso2' => 'EG', 'iso3' => 'EGY', 'country_name' => $countryName, 'name' => 'EGYPT', 'active' => 1, 'published' => 1];

返回

[{"country_id":63,"iso2":"EG","iso3":"EGY","country_name":"Egypt","name":"EGYPT","active":1,"published":1}]

但使用 json_encode() 将 PHP 数组显式转换为 JSON 字符串并将其作为响应返回,则返回转义的 JSON。

return response()->json(json_encode(['country_id' => $countryId, 'iso2' => 'EG', 'iso3' => 'EGY', 'country_name' => $countryName, 'name' => 'EGYPT', 'active' => 1, 'published' => 1]));

返回

[{\"country_id\":63,\"iso2\":\"EG\",\"iso3\":\"EGY\",\"country_name\":\"Egypt\",\"name\":\"EGYPT\",\"active\":1,\"published\":1}]

是否有任何理由使用更详细的返回方式(我没有在客户端使用 eval,只有 JSON.parse() 将未转义和转义的 JSON 转换为相同的 javascript 对象)?

【问题讨论】:

  • 我真的不太了解 laravel,但在我看来,逃生似乎不应该存在。

标签: javascript php json laravel


【解决方案1】:

有两点:

  1. 根据文档https://laravel.com/docs/5.3/responses#creating-responses

框架会自动将数组转换成 JSON 响应

喜欢:

Route::get('/', function () {
    return [1, 2, 3];
});
  1. 根据https://laravel.com/docs/5.3/responses#json-responses

json 方法会自动将 Content-Type 标头设置为 application/json,并使用 json_encode PHP 函数将给定数组转换为 JSON

喜欢:

return response()->json([
   'name' => 'Abigail',
       'state' => 'CA'
]);

您在这两个方面都是正确的,但是您获得了转义代码,因为您使用了两次 json_encode(),一次是因为 response()->json() 根据文档在内部使用了该函数,另一次是在您的代码中明确使用在那个函数里面:response()->json(json_encode(...)),去掉里面的json_encode就可以正常工作了。

我已经测试了这两种样式并且收到的标题是相同的,所以我考虑使用显式 response()->json() 与只返回一个数组作为一个偏好问题,只要您使用实现该功能的版本.好像5.2及以下没有。

【讨论】:

    猜你喜欢
    • 2019-05-24
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2017-03-25
    • 2014-12-18
    • 1970-01-01
    相关资源
    最近更新 更多