如果我不清楚的话,这个可能有点难以理解。我想打开一个.json
文件,其中包含一个array
,并将/append
添加到array
,但我一直遇到array
的格式问题。我最初认为这需要是PHP,但我不明白为什么它现在不能是JS。
有些人可能会问,为什么我不使用数据库,它不会为我想做的工作。我只想在没有数据库的情况下将数据存储在文件中。
analytics.php执行时将数据添加到数据中。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);
数据。json(当执行analytics.php时)
[
{
"ip":"127.0.0.1",
"referrer":"www.google.com",
"conversion":"nil",
"bounce":"nil",
"platform":"Chrome"
}
]
问题是,如果你运行分析。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"
}
]
您想要做的事情并不容易实现,因为仅仅添加','也会导致无效的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,所以它有点黑客/讨厌的IMO。正如其他人所建议的,标准的日志文件格式可能更有意义。
问题不在于只是缺少,
,即使你有一个,
在那里,它将是一个无效的JSON文件。
你的问题是JSON的两个"容器"类型(数组和对象)都需要一个终止字符。加上在前面插入终止字符 —在你的例子中,在后面的]
前面,这样你就可以在基本数组中添加另一个对象。
这使得JSON成为不太理想的日志文件格式。建议使用任何标准的HTTP日志文件格式,例如通用日志格式,然后在事后必要时转换为JSON。