Json解码PHP中的麻烦(多个数组)

资讯搜索

以下是通过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字符串。这有点很难。

您可以在此处确认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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JSON从PHP返回的多个数组

来自分类Dev

Mongodb-更新JSON数组中的多个数组元素

来自分类Dev

PHP从数组中获取多个数据

来自分类Dev

解码PHP中的多个JSON对象

来自分类Dev

在PHP中合并多个数组

来自分类Dev

在PHP中获取多个数组的交集

来自分类Dev

解码PHP中的javascript数组

来自分类Dev

PHP-创建具有多个数组的JSON对象

来自分类Dev

jQuery JSON解码多个数组

来自分类Dev

JSON从PHP返回的多个数组

来自分类Dev

Mongodb-更新JSON数组中的多个数组元素

来自分类Dev

如何在php中显示json解码数组?

来自分类Dev

用PHP解码JSON数组

来自分类Dev

json用php中的数组解码

来自分类Dev

PHP查询多个数组的JSON

来自分类Dev

从PHP中的多个数组中取出字段

来自分类Dev

PHP中的多个数组

来自分类Dev

Android从PHP解析JSON与多个数组响应

来自分类Dev

PHP JSON响应-遍历多个数组

来自分类Dev

解码和更新PHP中的JSON数组

来自分类Dev

在PHP中合并多个数组

来自分类Dev

在PHP中获取多个数组的交集

来自分类Dev

PHP JSON解码与多个对象

来自分类Dev

PHP创建JSON多个数组

来自分类Dev

解析PHP中的解码json数组

来自分类Dev

json_encode将多个数组编码为PHP中的一个JSON对象?

来自分类Dev

从php中的多个数组中获取相同键的值

来自分类Dev

如何遍历php中的多个数组的数组

来自分类Dev

将多个数组中的值存储到 PHP 中的一个数组中