将Json写入现有文件.json而没有"语法错误"

时间:2016-09-26 15:49:20

标签: javascript php arrays json

如果我不清楚,这个可能有点难以理解。我想打开.json文件,其中包含array并向append添加/ array,但我不断遇到array的格式问题。我首先想到这需要PHP,但我不明白为什么它现在不能成为JS。

有些人可能会问,为什么我没有使用数据库,它只是为了我想做的事情而努力。我只是在没有数据库的情况下将数据存储在现场文件中。

执行时

analytics.php 将数据添加到data.json文件中。计划是在每次访问(小网站)时调用它。

$visitArray = [];

$visitArray["ip"] = "127.0.0.1";
$visitArray["referrer"] = "www.google.com";
$visitArray["conversion"] = "nil";
$visitArray["bounce"] = "nil";
$visitArray["platform"] = "Chrome";
$VisiterArray[] = $visitArray;



$data = json_encode($VisiterArray);
$data = $data;
file_put_contents("data.json", $data, FILE_APPEND);

data.json (执行 analytics.php 时)

[
   {
    "ip":"127.0.0.1",
    "referrer":"www.google.com",
    "conversion":"nil",
    "bounce":"nil",
    "platform":"Chrome"
   }
]

问题是,如果您运行 analytics.php ,那么","而且我认为将$data = $data;更改为$data = $data.',';并不容易解决,这似乎是一种糟糕的做事方式。

    [
   {
    "ip":"127.0.0.1",
    "referrer":"www.google.com",
    "conversion":"nil",
    "bounce":"nil",
    "platform":"Chrome"
   }
]
    // missing ","
[
   {
    "ip":"127.0.0.1",
    "referrer":"www.google.com",
    "conversion":"nil",
    "bounce":"nil",
    "platform":"Chrome"
   }
]

2 个答案:

答案 0 :(得分:2)

你想要做的事情是不容易实现的,因为只添加','也会导致无效的json(因为你的数组也需要在数组中)

最简单的解决方案就是将您的JS重新序列化并将其附加到那里。像

这样的东西
$VisiterArray = json_decode(file_get_contents("data.json"));
$visitArray = [];

$visitArray["ip"] = "127.0.0.1";
$visitArray["referrer"] = "www.google.com";
$visitArray["conversion"] = "nil";
$visitArray["bounce"] = "nil";
$visitArray["platform"] = "Chrome";
$VisiterArray[] = $visitArray;

$data = json_encode($VisiterArray);
file_put_contents("data.json", $data);

虽然这不是记录的理想选择。

如果你真的想这样做,你可能会有点欺骗。 IE浏览器。如你所建议的那样,在每个肠道后面添加一个“,”然后用类似$data = json_decode("[".file_get_contenst("data.json")."]");的东西读取它可能有效 - 虽然此时文件不是真正的json,所以它有点hacky /讨厌的IMO。正如其他人所建议的那样,标准日志文件格式可能更有意义。

答案 1 :(得分:1)

问题不是只是缺少,,即使你有一个,,它也会是一个无效的JSON文件。

您遇到的问题是JSON具有的两个“容器”类型(数组和对象)都需要终止字符。添加到前面前面插入的方法 - 在你的情况下,在尾随]前面,这样你就可以将另一个对象添加到基础数组中。

这使得JSON成为日志文件的理想格式。建议使用任何标准HTTP日志文件格式,例如common log format,然后根据需要转换为JSON。