Php 如何在Laravel 5.6 json响应中将空值转换为空字符串?
我从我的Php 如何在Laravel 5.6 json响应中将空值转换为空字符串?,php,json,laravel,null,laravel-5.6,Php,Json,Laravel,Null,Laravel 5.6,我从我的Laravel 5.6中得到了以下回复: { "id": 1, "name": "Test", "email": "anything@example.com", "descr": null } 它来自这个LaravelPHPcode: public function show($id) { return Client::find($id); } Laravel 5.6中是否有任何内置函数将空值更改为空?我想找回这个json对象: { "
Laravel 5.6
中得到了以下回复:
{
"id": 1,
"name": "Test",
"email": "anything@example.com",
"descr": null
}
它来自这个LaravelPHP
code:
public function show($id) {
return Client::find($id);
}
Laravel 5.6中是否有任何内置函数将空值更改为空?我想找回这个json对象:
{
"id": 1,
"name": "Test",
"email": "anything@example.com",
"descr": ""
}
有什么想法吗?如果你没有任何选择,而且你真的需要它,你可以使用中间件来实现 使用以下代码在文件夹
app/Http/Middleware
中创建名为NullToBlank.php
的文件:
在app/Http/Kernel.php
中,确保添加:
在$middleware
下
这应该能奏效。我没有亲自测试过,我只是在路上测试过,如果你有问题,请告诉我
Luca在返回之前添加此函数
array_walk_recursive($array,function(&$item){$item=strval($item);}) 你想要空值而不是空值的具体原因是什么?因为我在前端得到空值,所以我需要写一个“if”语句来处理空值。我处理的许多文本文件(SQL)在数据库中可能为空,但我太懒了,无法处理代码中50多个位置的空值。。。如果这些字段不为null,那么可能会更简单。处理null与处理空字符串有什么不同?不是尴尬,只是也许你不需要空字符串?此外,最好是重构以在正确的点正确地处理数据,而不是进一步改变链条上的某些东西,这可能在以后的好的点上是出乎意料的,但我对答案很确定:)是的,足够公平了
null
表示没有,不存在,而描述的空字符串表示有描述(已设置等),它只是空的。这并不能回答问题。所有这些代码如何比简单地检查is_null()
更好?甚至是如果(is_null($desc)){$desc='';}
@James实际上是这样的。他试图以响应的形式返回一个模型,该模型将自动转换为带有返回模型属性的JSON响应。他说他不想在每次需要时检查它是否为空,将其转换为空字符串。我假设他试图通过AJAX请求获得此响应,因此在JavaScript中打印null值将打印字符串“null”
,而不是空字符串。这段代码只是检查响应是否是一个模型,在这种情况下,将null更改为空字符串并将其作为json响应返回。“在Laravel 5.6中是否有任何内置函数将null值更改为空字符串?”我认为他们特别想使用return Client::find($id)
以某种方式返回空字符串而不是null。而不是一个完全成熟的新类,它需要在某个地方实例化并插入到当前代码中。这是一个可行的选择,也是为什么我从来没有放弃过,但它没有回答这个问题——那就是“是这样”或“不,你不能”(本质上):@James在这种情况下,你是完全正确的!事实上,地雷可以被视为一种可行的替代品。尽管可能有几种选择。这取决于需要。请确保标记代码并提供有效的代码段。这是一个半片段。
<?php
namespace App\Http\Middleware;
use Illuminate\Database\Eloquent\Model;
use Closure;
class NullToBlank
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$output = $next($request);
if($output instanceof Model)
return response()->json(array_map(function ($value) {
return $value === null ? '' : $value;
}, $output->toArray()));
return $output;
}
}
if($output instanceof Model) {
$modelAsArray = $output->toArray();
array_walk_recursive($modelAsArray, function (&$item, $key) {
$item = $item === null ? '' : $item;
});
return response()->json($modelAsArray);
}
\App\Http\Middleware\NullToBlank::class,