我们的PHP API使用启用了JSON_NUMERIC_CHECK的json_encode输出结果,这对于财务数据,二进制值等非常重要.但是我们最近引入了一个电话号码字段,当它将数字转换为数字时,它会从数字的开头删除零.整数.
我试图在它转到json_encode之前强制"(string)"类型,但看起来该函数覆盖了它.例如:
$output = array(
'is_bool' => 1,
'total_amount' => '431.65',
'phone_number' => (string) '0272561313'
);
echo json_encode($output,JSON_NUMERIC_CHECK);
Run Code Online (Sandbox Code Playgroud)
生产:
{"is_bool":1,"total_amount":431.65,"phone_number":272561313}
Run Code Online (Sandbox Code Playgroud)
任何关于如何最好地处理这个的建议将非常感激.我真的不想在电话号码的末尾添加尾随空格,只是为了让它通过字符串输出.
谢谢!
而不是将其类型转换为字符串做这样的事情:
$output = array(
'is_bool' => 1,
'total_amount' => '431.65',
'phone_number' => '"0272561313"' // add quotations
);
echo '<pre>';
echo json_encode($output,JSON_NUMERIC_CHECK | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
Run Code Online (Sandbox Code Playgroud)
它保持尾随零:
{
"is_bool": 1,
"total_amount": 431.65,
"phone_number": "\"0272561313\""
}
Run Code Online (Sandbox Code Playgroud)
解码:
$test = json_encode($output,JSON_NUMERIC_CHECK | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
$test = json_decode($test, true);
print_r($test);
Run Code Online (Sandbox Code Playgroud)
输出:
Array
(
[is_bool] => 1
[total_amount] => 431.65
[phone_number] => "0272561313"
)
Run Code Online (Sandbox Code Playgroud)
你可以试试这个:
{
"is_bool": 1,
"total_amount": 431.65,
"phone_number": "xn#0272561313"
}
Run Code Online (Sandbox Code Playgroud)
例如在 mysql: SELECT CONCAT('xn#', phone_number) as phone_number...
如果您使用json_encode(),请像这样替换字符串:
echo str_replace('xn#','',$your_encoded_json);
Run Code Online (Sandbox Code Playgroud)