将 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"}"