【发布时间】:2013-10-13 04:37:29
【问题描述】:
我有一个巨大的字符串转储,其中包含常规文本和 JSON 的混合。我想从字符串转储中分离/删除 JSON 对象并仅获取文本。
这是一个例子:
This is some text {'JSON':'Object'} Here's some more text {'JSON':'Object'} Yet more text {'JSON':'Object'} Again, some text.
我的目标是得到一个看起来像这样的文本转储(基本上 JSON 已被删除):
This is some text Here's some more text Yet more text Again, some text.
我需要在 PHP 中完成这一切。文本转储总是随机的,JSON 数据结构也是如此(其中大部分是深度嵌套的)。转储可能以 JSON 开头,也可能不以 JSON 开头,字符串转储中可能包含也可能不包含多个 JSON 对象。
我尝试在字符串上使用json_decode,但结果最终为NULL
编辑:Amal 的答案非常接近我想要的(见下面的第二条评论):
$str = preg_replace('#\{.*?\}#s', '', $str);
但是,它根本没有摆脱嵌套对象;例如括号内的数据:[]或[{}]
抱歉,我不是正则表达式专家。
我意识到你们中的一些人可能需要我正在处理的字符串转储的更具体示例;因此我创建了一个要点(请注意,这不是静态数据;转储中的数据总是不同的;我上面的示例只是简化了我正在使用的字符串):https://gist.github.com/anonymous/6855800
【问题讨论】:
-
你试过了吗?
-
$str = preg_replace('#\{.*?\}#s', '', $str);? -
杰瑞:我试过
json_decode,但没用。 Amal:那种工作,但它似乎并没有摆脱括号中包含的嵌套数据[]或[{}] -
介意显示你用过的代码吗?
-
杰瑞:我在问这个问题之前使用的代码很简单:
$string = json_decode($json, true);。而已;除此之外,实际的字符串转储长度约为 13,000 个字符,位于 json_decode 行之前。