以下是通过webhook存储在我的服务器上的Json文件:
[{“ event”:“ open”,“ email”:“ [email protected]”,“ timestamp”:1414435811,“ category”:[“ Newsletter”],“ newsletter”:{“ newsletter_user_list_id”:“ 18177422” ,“ newsletter_id”:“ 3318683”,“ newsletter_send_id”:“ 3470425”}}]] [{“ event”:“ open”,“ email”:“ [email protected]”,“ timestamp”:1414435811,“ category” :[“ Newsletter”],“ newsletter”:{“ newsletter_user_list_id”:“ 18177422”,“ newsletter_id”:“ 3318683”,“ newsletter_send_id”:“ 3470425”}}]
我想读取此文件并将其更新到我的数据库中。我试图将网络上的代码片段放在一起,但实际上并没有用...我(认为我)在弄清楚如何读取多个数组时遇到了麻烦。
[{“ event”:“ open”,“ email”:“ [email protected]”,“ timestamp”:1414435811,“ category”:[“ Newsletter”],“ newsletter”:{“ newsletter_user_list_id”:“ 18177422” ,“ newsletter_id”:“ 3318683”,“ newsletter_send_id”:“ 3470425”}
要使用上面给出的示例,当webhook.log文件仅用Json文件的第一部分填充时,它将正常工作并输出:open myemail @ email 10/27/2014 01:50:11。当我尝试读取多个数组中的一个时,它给我:Uncaught异常'InvalidArgumentException',并显示消息'传递的变量不是数组或对象,而是使用空数组。而且由于$ 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;
}
}
}
}
您作为示例提供的文件不是有效的JSON字符串。这有点很难。
Parse error on line 15:
...5" } }][ { "eve
--------------------^
Expecting 'EOF', '}', ',', ']'
具体来说,这就是数组的对接:
[... array data ...]
[... another array ...]
这是不正确的语法。可以解码多个JSON数组,但是它们必须放在一个父容器中,并且在它们之间有一个有效的分隔符:
[
[... array data ...],
[... another array ...]
]
[ ... ]
父数组在哪里,并且,
将它们分开。这将为您提供一个数组数组。
不幸的是,有没有办法来解析JSON字符串,使你有表现正常。正则表达式不是这里的解决方案,反正不是简单的正则表达式。查看是否可以正确的形式获取数据。或者,如果您从两个不同的位置/调用中获取数据,然后自己将其写到文件中,则以正确的格式编写。
如果要用JSON数组填充文件,并且要增量写入并以Array数组形式读出,请尝试按此处的方式编写它们,但要,
分开。当您读出它们时,只需将它们包装起来[ ... ]
并解码即可。这应该给您预期的结果:
写一个到空文件:
[... json array 1 ...]
编写另一个(在现有文件的末尾添加一个逗号,并附加JSON):
[... json array 1 ...],
[... json array 2 ...]
将其确切地读入一个PHP字符串中,并包装在其中[ ... ]
:
$file_string = $...; // the above
$json_string = "[$file_string]"; // now valid
// decode
那应该为你做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句