【发布时间】:2015-01-16 18:20:37
【问题描述】:
是否有可能有一个包含 PHP 代码的 JSON 字符串,并对此字符串进行解码?
例如,这可以正常工作:
$array = ["page", "is-home", $_SERVER["REQUEST_URI"] == "/"];
var_export($array);
// array (
// 0 => 'page',
// 1 => 'is-home',
// 2 => false,
// )
这个不行:
$json = '["page", "is-home", $_SERVER["REQUEST_URI"] == "/"]';
$array = json_decode($json); // returns NULL
echo json_last_error_msg(); // Syntax error
第二个示例仅在 $_SERVER["REQUEST_URI"] == "/" 从 json 字符串中删除时才有效。
有没有办法使用 json_decode 解析这个字符串,如果没有,是否有替代方法来完成这个?
非常感谢!
更新
$_SERVER["REQUEST_URI"] == "/" 必须被解析。我正在尝试扩展刀片模板,以便我可以实现这样的解析函数:
@add-request('page', 'is-home', $_SERVER["REQUEST_URI"] == '/')
更新 #2
为了简化问题,我需要把一个字符串变成一个对象。
$str = '["page", "is-home", $_SERVER["REQUEST_URI"] == "/"]'; // this is obtained by parsing the top blade extension (not important how)
从字符串中我需要以下数组:
$array = ["page", "is-home", true / false ]
请记住,理论上,原始字符串可以包含 JSON 值之一的任何 PHP 对象。
【问题讨论】:
-
第二个例子看起来不像是有效的 JSON 语法,所以它不应该被解码。您可以(但请不要这样做)将所有内容包含在字符串标记中,然后对其进行评估(请不要这样做,请不要这样做)。
-
感谢您的建议。我决心找到另一种方法而不是使用 eval,即使这意味着自己解析字符串。谢谢!
-
您实际上想要做什么?
-
好的,您的第二次更新清除了它。我认为 json 函数不是您应该寻找的。您所拥有的不是有效的 json 字符串,因此不能这样解析。即使可以,php 部分仍然不会被评估。您唯一的选择是手动或通过 eval(包括所有问题)将字符串评估为 php 代码。
-
有点,但我不知道如何在 Blade 中最好地做到这一点。我建议您发布一个新问题,对您的目标进行这种高级别的解释,并让某人向您解释在 Blade 中实现此目的的惯用方式。