如何覆盖 php 中的 json_encode() 功能以将 null 替换为 " "



我使用php编程创建了总api,对于我使用的输出

json_encode($arr)

现在我想通过用"代替null来打印输出。

我已经使用JSON_ENCODE($ arr)完成了400多个网络服务,但我不想更改为

任何身体都可以帮助

我的实际数组

$array=array("id" => "2",
"name" => "Test Name",
"address" => "83 Test Street",
"city" => "Test",
"phone" => "(123) 456-7890",
"video_thumb" => null,
"thumbnail" => null,
"description" => null);

echo json_encode($ array);//输出:

{"id":"2",
"name":"Test Name",
"address":"83 Test Street","city":"Test","phone":"(123) 456-7890","video_thumb":null,
"thumbnail":null,
"description":null
}

期望输出//输出

    {"id":"2","name":"Test Name",
"address":"83 Test Street",
"city":"Test","phone":"(123) 456-7890","video_thumb":"",
"thumbnail":"",
"description":""}

喜欢这个

$array = array("id" => "2",
    "name" => "Test Name",
    "address" => "83 Test Street",
    "city" => "Test",
    "phone" => "(123) 456-7890",
    "video_thumb" => null,
    "thumbnail" => null,
    "description" => null
);
array_walk_recursive($array, function(&$item){
    if(is_null($item)) $item = '';
});
echo json_encode($array);

输出

{"id":"2","name":"Test Name","address":"83 Test Street","city":"Test","phone":"(123) 456-7890","video_thumb":"","thumbnail":"","description":""}

沙盒

如果您必须称其为400次,请将其包装在功能中。像这样装饰普通的json_encode:

function my_json_encode($value,$options=0,$depth=512){
     array_walk_recursive($value, function(&$item){
        if(is_null($item)) $item = '';
     });
     return json_encode($value,$options,$depth);
}

这样,您可以访问普通方法的所有选项和功能,但是有一个小更改。没有核心功能的"覆盖",没有以覆盖类方法的方式。函数只能定义一次,然后设置它们。

此代码帮助我解决了问题,而无需修改所有服务

ob_start(function($json) {
    function json_validator($data = NULL) {
        if (!empty($data)) {
            json_decode($data);
            return (json_last_error() === JSON_ERROR_NONE);
        }
        return false;
    }
    if (json_validator($json)) {
        $response_arry = json_decode(str_replace('null', '""', $json));
        if (json_last_error_msg() == "Syntax error") {
            $response_arry = json_decode(str_replace('"null"', '""', $arr));
        }
        return json_encode($response_arry, JSON_PRETTY_PRINT);
    } else {
        return ob_get_contents();
    }
});

这个想法是使用OverRide_function"修改" JSON_ENCODE函数。在调用此功能之前,可以修改数组,以满足空字符串而不是空。您可以尝试一下:

rename_function('json_encode', 'override_json_encode' );
override_function("json_encode", '$array', 'return override_json_encode($array);' );

function override_json_encode($array){
    foreach ($array as &$value) {
        if ($value === null) 
             $value = "";
    }
return json_encode($array);
}

}

哦,了解您的平均值。请查看关注文档:http://php.net/manual/en/ref.apd.phprename_function和override_function

最新更新