使用PHP,我想将一个值绑定到一个JSON字符串,类似于在使用问号为数据库准备SQL语句时的操作方式。例如,我想做类似以下的事情:
$v1 = 'v1';
$k2 = 'k2';
$result = json_bind('[{"k1": ?}, {?: "v2"}]', $v1, $k2);
echo $result; // [{"k1": "v1"}, {"k2": "v2"}]
json_encode
,因为这会变得混乱,因为PHP的语法与JSON的语法不同,我需要更动态的东西,因为我可能并不总是知道结构JSON。是否已经存在可以执行此操作的库或函数?
它有点像一个简单的正则表达式“标记器” - 通过大多数跳过字符串。
#-- Replace `?` placeholders
function json_bind($template, ...$vars) {
return preg_replace_callback(
'/
[{}[\],:] \K | # meta chars
(true|false|null) \K | # literals
[-+\d.e]+ \K | # numbers
"([^"\\\\]+|\\\\.)*" \K | # strings
([?]) # placeholder (do not skip)
/x',
function ($m) use (& $vars) {
if ($m[0] == "?") {
return json_encode(array_shift($vars));
}
},
$template
);
}
虽然这不是一个非常完整/干净的正则表达式,但它应该跳过大多数标准JSON结构和大多数字符串(请参阅Regex to validate JSON以获得更好的正则表达式)。这是你如何找到文字?
占位符。
值得注意的是,它没有处理语义上无效的模板,例如JSON键的数组参数,例如
是否已经存在可以执行此操作的库或函数?
没有。
你怎么不知道JSON结构?如果您无法将问号区分为键或值,那么将值传递给函数以将值绑定到字符串是什么?
有一次你说我确实知道我想要绑定什么,并且我以任意方式将它传递给一个函数,尽管我对源JSON字符串的结构没有任何线索。因此,我不知道结果是否正确。
为什么有人想要这样的东西?
你只需要回答@Bart Friederichs的答案。这是您问题的唯一正确答案。