让我们简化一下问题:
我只需要在括号之间用逗号分隔()字符串。问题是由逗号选择的元素本身可以有一个逗号,因此简单的爆炸将不起作用。我不是在问如何解码JSON。
参数的数量,它们的类型总是不同的,例如
('foo')
('bar', NULL)
({"JSON": "data"}, 'test')
假设我有这部分代码:
({"class": "navigation", "id": "navigation"}, NULL, 'bar' /* [..] */)
任何人都可以建议使用正则表达式(或替代方法)来获取所有逗号分隔的条目(作为字符串)吗?问题是变量本身可以包含逗号。因此,我认为这需要递归。
预期结果将是包含以下条目的数组:
{"class": "navigation", "id": "navigation"}
NULL
'bar'
答案 0 :(得分:2)
经过几个小时的工作,我发现PHP将无法解析包含NULL的JSON字符串(大写null)。这就是导致以下代码无法工作的原因。但是,简单地将NULL替换为null可以解决问题。
var_dump(json_decode('[{"class": "navigation", "id": "navigation"}, NULL, "bar"]')
答案 1 :(得分:2)
这是有用的:
$str = 'NULL, {"class": "navigation", "id": "navigation"}, NULL, \'bar\'';
var_dump(preg_split( '%(,(?!.*})|,(?=.*{)\s+)%', $str));
结果:
~$ php ./test.php
array(4) {
[0]=>
string(4) "NULL"
[1]=>
string(44) "{"class": "navigation", "id": "navigation"}"
[2]=>
string(5) "NULL"
[3]=>
string(6) "'bar'"
}
不完全是递归正则表达式,而是前瞻性断言。条件是逗号不应该跟}后面,或者后跟{。
答案 2 :(得分:0)
在[和]之间添加该代码,然后使用json_decode()
它应该返回一个关联数组
您应该将[]
用于隐式索引,将{}
用于显式索引
示例:
[] : ['w', null, 123, {'a':1}] <- implicit keys (0, 1, 2, 3)
{} : {'0':'w', '1':null, '2':123, '3':{'a':1}} <- explicit keys (0, 1, 2, 3)
您不能将隐式/显式索引混合到同一个结构中,但您可以创建一个包含不同值的数组([]
),如上例所示。
$code = substr('({"id":"navigation"}, null, "bar")', 1, -1); // removes ^\( and \)$
$result = json_decode('[' . $code . ']');
echo $result[0]['id']; // returns 'navigation'
echo $result[1]; // returns NULL
echo $result[2]; // returns 'bar'
答案 3 :(得分:0)
看起来像是json。您应该使用json_decode,它将创建一个数组,然后您可以遍历数组以获取键/值。
答案 4 :(得分:0)
黑客警报!
将{}包装成单引号,以便您的{“JSON”:“data”}变为“{”JSON“:”data“}'
使用str_getcsv()来解析字符串(现在是CSV)
从{}