以下是通过webhook存储在我的服务器上的Json文件:
[{"事件":"开""电子邮件":" myemail@email.com","&时间戳#34;:1414435811,"类别":["通讯&#34],"通讯" {" newsletter_user_list_id":" 18177422& #34;" newsletter_id":" 3318683"" newsletter_send_id":" 3470425"}}] [{"事件":"开""电子邮件":" youremail@email.com","时间戳" :1414435811"类别":["通讯&#34],"通讯" {" newsletter_user_list_id":" 18177422" " newsletter_id":" 3318683"" newsletter_send_id":" 3470425"}}]
我想阅读此文件并将其更新到我的数据库中。我试图将网络上的片段放在一起,但它并没有真正起作用......我(我想)我很难弄清楚如何读取多个数组。
[{"事件":"开""电子邮件":" myemail@email.com","&时间戳#34;:1414435811,"类别":["通讯&#34],"通讯" {" newsletter_user_list_id":" 18177422& #34;" newsletter_id":" 3318683"" newsletter_send_id":" 3470425"}]
要使用上面给出的示例,当webhook.log文件只填充了Json文件的第一部分时,它可以正常工作并输出:open myemail @ email 10/27/2014 01:50:11。当我尝试读取多个数组时,它会给我:未捕获的异常' InvalidArgumentException' with message' Passed变量不是数组或对象,而是使用空数组。'由于$ json在提示时输出整个文件,我假设" json_decode($ json,TRUE)"没有做好自己的工作。我是新手,需要一些帮助......谢谢!
$filename = "webhook.log";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
$json = file_get_contents($filename);
fclose($handle);
$jsonIterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator(json_decode($json, TRUE)),
RecursiveIteratorIterator::SELF_FIRST);
foreach ($jsonIterator as $key => $val) {
if(is_array($val)) {
// echo "$key:\n";
}
else {
if ($key!=Newsletter){
// echo "$key => $val\n";
if ($key==event){
$status=$val;
echo $status;
}
if ($key==email){
$email=$val;
echo $email;
}
if ($key==timestamp){
$date=date('m/d/Y h:i:s', $val);
echo $date;
}
}
}
}
答案 0 :(得分:0)
您提供的文件作为示例不是有效的JSON字符串。这是一种艰难的停留。
您可以确认JSON字符串here的无效性:
Parse error on line 15:
...5" } }][ { "eve
--------------------^
Expecting 'EOF', '}', ',', ']'
具体而言,指出的是阵列的对接:
[... array data ...]
[... another array ...]
这是不正确的语法。可以解码多个JSON数组,但它们必须位于父容器中,并且它们之间有一个有效的分隔符:
[
[... array data ...],
[... another array ...]
]
其中[ ... ]
是父数组,,
将它们分开。这将为您提供一系列数组。
不幸的是,没有办法解析JSON字符串以使你拥有的行为正确。 Regex不是这里的解决方案,好吧,不是简单的正则表达式。看看你是否能以正确的形式获取数据。或者,如果您从两个不同的地方/电话中获取数据,并且首先将其写入文件,请以正确的形式写入。
如果你想要一个充满JSON数组的文件,你想要逐步写入并作为数组数组读出,请尝试按照这里的方式编写它们,但用,
分隔它们。当你读出它们时,只需用[ ... ]
包裹它们并解码即可。这应该会给你预期的结果:
将一个写入空文件:
[... json array 1 ...]
写另一个(在现有文件的末尾添加一个昏迷并附加JSON):
[... json array 1 ...],
[... json array 2 ...]
将其完全读入PHP字符串,包含在[ ... ]
:
$file_string = $...; // the above
$json_string = "[$file_string]"; // now valid
// decode
那应该为你做。