显式返回转义的JSON响应与仅在Laravel / PHP中返回数组

时间:2016-12-18 15:00:37

标签: javascript php json laravel

如果我比较Laravel的5.25.3文档,5.3文档似乎鼓励只返回一个包含数据的数组,该数据将自动转换为JSON响应(内容类型 “应用程序/ 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}]

但显式地将PHP数组转换为带有 json_encode()的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对象)?

1 个答案:

答案 0 :(得分: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及以下版本没有。