PHP json_解码整数并将其浮点数转换为字符串
我想预解析json,并将json中的所有数字(整数或浮点)转换为字符串 例如:PHP json_解码整数并将其浮点数转换为字符串,php,json,numbers,Php,Json,Numbers,我想预解析json,并将json中的所有数字(整数或浮点)转换为字符串 例如: { "integer": 10000, "big_integer": 100000999499498485845848584584584, "float1" : 1.121212, "float2" : 8.226347662837406e+09 } 为此: { "integer": "10000", "big_integer": "100000999499498485845848584584584",
{
"integer": 10000,
"big_integer": 100000999499498485845848584584584,
"float1" : 1.121212,
"float2" : 8.226347662837406e+09
}
为此:
{
"integer": "10000",
"big_integer": "100000999499498485845848584584584",
"float1" : "1.121212",
"float2" : "8226347662.837406"
}
更新
我已找到,但它不适用于浮动:
$jsonString = '[{"name":"john","id":5932725006},{"name":"max","id":4953467146}]';
echo preg_replace('/("\w+"):(\d+)/', '\\1:"\\2"', $jsonString);
//prints [{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}]
更新2固定第二个浮点值。它有两点 使用这个:它应该可以工作
echo preg_replace('/\: *([0-9]+\.?[0-9e+\-]*)/', ':"\\1"', $jsonString);
使用
JSON\u BIGINT\u作为字符串
选项:
json\u decode($jsonString,false,512,json\u BIGINT\u AS\u STRING)
我喜欢这是大浮点的解决方案:
$json = '{"data":[[0.00004639,683724.2687321],[0.00004658,190091.61007863]]}';
$json = preg_replace('/([0-9]+)\.([0-9]+)/', '"$1.$2"', $json);
print_r(json_decode($json, true));
这是只对字符串进行代码替换的float,您应该在调用json_decode()之前使用它
JSON:
解码后:
array (
'data' => array (
0 => array (
0 => '0.00004639',
1 => '683724.2687321',
),
1 => array (
0 => '0.00004658',
1 => '190091.61007863',
),
),
)
如果有人希望正则表达式也与负数匹配,请参见:
echo preg_replace('/\: *([0-9]+\.?[0-9e+\-]*|-[0-9]+\.?[0-9e+\-]*)/', ':"\\1"', $jsonString);
下面是将这些数字用引号括起来,使其成为字符串的最正确方法。这不会扭曲json字符串的原始外观,并考虑了科学格式。()
我找到了这个解决方案,但它不适用于浮动。您可以在问题中将该注释设置为更新。它是否需要在PHP中,或者其他语言解决方案是否可以接受?是的,它需要在PHPIt中不起作用。它返回:
{integer“10000”、“big_integer”10000999499498485845848584584584”、“float1”1.121212、“float2”8.226347662.837406e+09}
抱歉,它不工作,但实际返回:{“integer”10000、“big_integer”10000999499498485845848584584584、“float1”1.121212、“float2”8.226347662837406e+09}
问题中有新的更新2谢谢@jibran bhat。它起作用了。虽然现在我有另一个问题与此相关。我想将hte json转换为一个对象,然后获取原始json,但该对象必须使用字符串作为json编号。更多信息:永远不要对JSON使用正则表达式。例如,这可能会损坏包含冒号和数字的字符串的json。还有许多其他潜在的问题。为什么会被接受?它在科学浮动上失败:“浮动2”:8.226347662837406e+09,注意它在列表上也会失败“[1.2,3.0]”
echo preg_replace('/\: *([0-9]+\.?[0-9e+\-]*|-[0-9]+\.?[0-9e+\-]*)/', ':"\\1"', $jsonString);
$regexp = '/"(\s*)\:(\s*)(\-?\d+([eE][\+|\-]?\d+|\.\d+)+)(\s*[,(\s*)|\}])/';
$json_string = preg_replace($regexp, "$1:$2\"$3\"$5", $json);