如果我不清楚,这个可能有点难以理解。我想打开.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"
}
]
答案 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。