将 JSON 个整数和浮点数转换为字符串
Convert JSON integers and floats to strings
我想预解析一个 JSON 并将整数和浮点值转换为 JSON 中的字符串。 JSON.
中也有一些字符串值
例如:
{
"first_name": "sample",
"last_name": "lastname",
"integer" : 100,
"float" : 1555.20
}
我只是像这样使用 :
中的 preg_replace()
echo preg_replace('/\: *([0-9]+\.?[0-9e+\-]*)/', '"\1"', $jsonString);
但是如果我的数组中有一个字符串值,它就不起作用,它只在数组中只有整数和浮点值时才起作用。
谁能帮忙解释一下为什么会这样?
这听起来像是 lookaheads and lookbehinds 的工作!
$newJson = preg_replace('/("\s*:\s*)(?<!")[\d\.]+(?!")/', '""', $json);
你可以想象这个here。
(?<!")
是一种消极的回顾。它是一个 "zero length expression" 意味着它实际上不匹配一个字符;如果 "
存在,它只是阻止匹配发生。 (?!")
是一个否定的前瞻,并且以相同的方式工作,但匹配向前而不是向后。
解决方法如下:
$str = '{"first_name":"sample",
"last_name": "lastname",
"integer" : 100,
"float" : 1555.20,
"createddate":"2015-06-25 09:57:28"}';
$result = preg_replace("/(\"\w+\":\s*?)(\d+\.?[^,\}]*\b)/imu",'""',$str);
var_dump($result);
// output:
string(121) "{"first_name":"sample",
"last_name": "lastname",
"integer" : 100,
"float" : 1555.20,
"createddate":"2015-06-25 09:57:28"}"
我想预解析一个 JSON 并将整数和浮点值转换为 JSON 中的字符串。 JSON.
中也有一些字符串值例如:
{
"first_name": "sample",
"last_name": "lastname",
"integer" : 100,
"float" : 1555.20
}
我只是像这样使用
preg_replace()
echo preg_replace('/\: *([0-9]+\.?[0-9e+\-]*)/', '"\1"', $jsonString);
但是如果我的数组中有一个字符串值,它就不起作用,它只在数组中只有整数和浮点值时才起作用。
谁能帮忙解释一下为什么会这样?
这听起来像是 lookaheads and lookbehinds 的工作!
$newJson = preg_replace('/("\s*:\s*)(?<!")[\d\.]+(?!")/', '""', $json);
你可以想象这个here。
(?<!")
是一种消极的回顾。它是一个 "zero length expression" 意味着它实际上不匹配一个字符;如果 "
存在,它只是阻止匹配发生。 (?!")
是一个否定的前瞻,并且以相同的方式工作,但匹配向前而不是向后。
解决方法如下:
$str = '{"first_name":"sample",
"last_name": "lastname",
"integer" : 100,
"float" : 1555.20,
"createddate":"2015-06-25 09:57:28"}';
$result = preg_replace("/(\"\w+\":\s*?)(\d+\.?[^,\}]*\b)/imu",'""',$str);
var_dump($result);
// output:
string(121) "{"first_name":"sample",
"last_name": "lastname",
"integer" : 100,
"float" : 1555.20,
"createddate":"2015-06-25 09:57:28"}"