PHP 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",

我想预解析json,并将json中的所有数字(整数或浮点)转换为字符串

例如:

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