我们的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);产生:
{"is_bool":1,"total_amount":431.65,"phone_number":272561313}任何关于如何最好地处理这一点的建议都将不胜感激。我真的不想在电话号码的末尾添加尾随空格,当它只是作为一个字符串输出时。
谢谢!
发布于 2014-07-02 09:15:57
而不是将其类型转换为字符串,如下所示:
$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);它会保持尾数为零:
{
"is_bool": 1,
"total_amount": 431.65,
"phone_number": "\"0272561313\""
}解码:
$test = json_encode($output,JSON_NUMERIC_CHECK | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
$test = json_decode($test, true);
print_r($test);输出:
Array
(
[is_bool] => 1
[total_amount] => 431.65
[phone_number] => "0272561313"
)发布于 2017-11-15 08:54:28
您可以尝试这样做:
{
"is_bool": 1,
"total_amount": 431.65,
"phone_number": "xn#0272561313"
}如mysql中的示例: SELECT CONCAT('xn#',phone_number) as phone_number...
如果您使用的是json_encode(),请将字符串替换为:
echo str_replace('xn#','',$your_encoded_json);发布于 2015-08-24 20:17:37
对于电话号码也有同样的问题,它遍历一个数组(没有对象!)仅将不以0或+开头的数值转换为整型或浮点型。
array_walk_recursive($json, function (&$value, $key)
{
if(is_string($value) && is_numeric($value))
{
// check if value doesn't starts with 0 or +
if(!preg_match('/^(\+|0)/', $value))
{
// cast $value to int or float
$value += 0;
}
}
});
return json_encode($json);https://stackoverflow.com/questions/24520950
复制相似问题