我正在提取一个无效的JSON提要。完全没有引号。我尝试了一些方法,比如explode()
和str_replace()
,让字符串看起来更像有效的JSON,但是如果里面有一个关联的JSON字符串,它通常会被搞砸。
下面是一个示例:
id:43015,name:'John Doe',level:15,systems:[{t:6,glr:1242,n:'server',s:185,c:9}],classs:0,subclass:5
有没有PHP的JSON解析器可以处理像这样的无效JSON?
编辑:我尝试在这个字符串上使用json_decode()
。它什么也不返回。
7条答案
按热度按时间qgelzfjb1#
1.所有的引号都应该是双引号
"
,而不是单引号'
。1.所有的键都应该加引号。
1.整个元素应该是一个对象。
uttx8gqw2#
这个正则表达式就可以了
km0tfn4u3#
根据我的经验,马尔科的答案不再起作用了。对于较新的php版本,请使用istead:
q3aa05254#
我知道这个问题很老了,但我希望这对某人有帮助。
我也有类似的问题,我想接受JSON作为用户输入,但又不想在每个键上都加上冗长的“引号”。此外,我也不想在值周围加上引号,但仍然要解析有效的数字。
最简单的方法似乎是编写一个自定义解析器。
我想出了这个,它解析为嵌套的关联/索引数组:
请注意,它不会捕捉错误或错误的格式。
对于您的情况,看起来您希望在它周围添加
{}
(因为json_decode
也需要):这对我来说是:
kb5ga3dv5#
这个解决方案似乎足以满足大多数常见的目的。
tvz2xvvm6#
我认为你最好的办法是下载JSON解码器的源代码(它们并不庞大)并摆弄它,特别是如果你知道你试图解码的JSON有什么问题的话。
您提供的示例也需要{ },这可能会有所帮助。
abithluo7#
这是我删除trailing/leading/multi-comms的解决方案。它可以与其他答案组合,删除单引号并在json键周围添加引号。我意识到这与OP无关,因为它处理其他类型的无效JSON,但我只是希望帮助那些在Google搜索中找到这个问题的人。
看repl.它。