如何转换此字符串:
{"id":"tag:search.twitter.com,2005:1"}{"id":"tag:search.twitter.com,2005:2"}
{"id":"tag:search.twitter.com,2005:3"}{"id":"tag:search.twitter.com,2005:4"}
进入这种JSON格式:
[
{"id":"tag:search.twitter.com,2005:1"},
{"id":"tag:search.twitter.com,2005:2"},
{"id":"tag:search.twitter.com,2005:3"},
{"id":"tag:search.twitter.com,2005:4"}
]
答案 0 :(得分:1)
你可以这样做:
$str = '{"id":"tag:search.twitter.com,2005:1"}{"id":"tag:search.twitter.com,2005:2"}
{"id":"tag:search.twitter.com,2005:3"}{"id":"tag:search.twitter.com,2005:4"}';
// wrap the string in [] to make it an array (when decoded).
// replace all the '}<spaces/line breaks/tabs>{' to '},{' to make it valid JSON array.
// decode the new JSON string to an object.
$obj = json_decode('[' . preg_replace('/}\s*{/', '},{', $str) . ']');
var_dump($obj);
输出:
array (size=4)
0 =>
object(stdClass)[424]
public 'id' => string 'tag:search.twitter.com,2005:1' (length=29)
1 =>
object(stdClass)[517]
public 'id' => string 'tag:search.twitter.com,2005:2' (length=29)
2 =>
object(stdClass)[518]
public 'id' => string 'tag:search.twitter.com,2005:3' (length=29)
3 =>
object(stdClass)[519]
public 'id' => string 'tag:search.twitter.com,2005:4' (length=29)
答案 1 :(得分:0)
假设您的字符串由放在一起而没有任何分隔符的有效JSON对象组成,您可以执行以下操作:
}{
作为分隔符,
为分隔符示例($input
作为输入字符串):
$chunks = explode('}{', $input);
$n = count($chunks);
for($i = 0; $i < $n; $i++) {
if($i == 0) {
$chunks[$i] = $chunks[$i].'}';
} else if($i == $n - 1) {
$chunks[$i] = '{'.$chunks[$i];
} else {
$chunks[$i] = '{'.$chunks[$i].'}';
}
}
$output = '['.implode(',', $chunks).']';
请注意,它将适用于复杂的结构,但如果文本中有}{
,则会失败。但这不太可能。
编辑:检查当前块是否是错误剪切的一种简单方法是通过检查是"
的下一个块开始,因为始终引用JSON对象的属性。如果没有,那么你可以合并当前和下一个块并重复,直到找到正确的字符。
答案 2 :(得分:0)
感谢您对我的问题发表评论......我已通过下面的代码解决了我的问题
foreach (preg_split("/((\r?\n)|(\r\n?))/", $tdata) as $line)
{
print_r(json_decode($line));
}