JSON_NUMERIC_CHECK和电话号码

Rya*_*all 10 php json

我们的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)

任何关于如何最好地处理这个的建议将非常感激.我真的不想在电话号码的末尾添加尾随空格,只是为了让它通过字符串输出.

谢谢!

use*_*142 7

而不是将其类型转换为字符串做这样的事情:

$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)

  • 感谢您的全面解答,但jQuery AJAX请求返回的phone_number字段返回带引号的"0272561313",而不仅仅是数字.我错过了什么吗? (2认同)

Pab*_*sso 6

你可以试试这个:

{
  "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)