向现有文件. Json写入Json,没有“语法错误”


Writing Json to existing file .json without "syntax errors"

如果我不清楚的话,这个可能有点难以理解。我想打开一个.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。