Javascript 正在将Json写入现有文件.Json,但不带“;“语法错误”;
如果我不清楚的话,这个可能有点难理解。我想打开一个Javascript 正在将Json写入现有文件.Json,但不带“;“语法错误”;,javascript,php,arrays,json,Javascript,Php,Arrays,Json,如果我不清楚的话,这个可能有点难理解。我想打开一个.json文件,其中包含一个数组,并向该数组添加/附加,但我一直遇到数组的格式问题。我最初认为这应该是PHP,但我不明白为什么现在不能是JS 有些人可能会问,为什么我不使用数据库,它只是不适合我想做的事情。我只是想知道在没有数据库的情况下如何将数据存储在现场文件中 analytics.php在执行时将数据添加到data.json文件中。计划是在每次访问(小型站点)时调用此功能 data.json(执行analytics.php时) 问题是如果运行
.json
文件,其中包含一个数组
,并向该数组
添加/附加
,但我一直遇到数组
的格式问题。我最初认为这应该是PHP,但我不明白为什么现在不能是JS
有些人可能会问,为什么我不使用数据库,它只是不适合我想做的事情。我只是想知道在没有数据库的情况下如何将数据存储在现场文件中
analytics.php在执行时将数据添加到data.json文件中。计划是在每次访问(小型站点)时调用此功能
data.json(执行analytics.php时)
问题是如果运行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"
}
]
问题不仅仅是缺少一个,
,即使您有一个,
,它也是一个无效的JSON文件
问题是JSON的两种“容器”类型(数组和对象)都需要终止字符。添加到表示在终止字符前面插入-在您的情况下,在尾部]
前面插入,这样您就可以将另一个对象添加到基本数组中
这使得JSON不是日志文件的理想格式。建议使用任何标准的HTTP日志文件格式,如,然后在事后根据需要转换为JSON。问题不仅仅是缺少,
,即使有,
,也可能是无效的JSON文件
问题是JSON的两种“容器”类型(数组和对象)都需要终止字符。添加到表示在终止字符前面插入-在您的情况下,在尾部]
前面插入,这样您就可以将另一个对象添加到基本数组中
这使得JSON不是日志文件的理想格式。建议使用任何标准的HTTP日志文件格式,如,然后在事后根据需要转换为JSON。您想要做的事情并不容易实现,因为只添加一个“,”也会导致无效的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);
尽管这对于日志记录来说并不理想
如果你真的想那样做,你可能有点作弊。例如,按照您的建议,在每个输入后添加一个“,”,然后使用类似于$data=json\u decode(“[”.file\u get\u contenst(“data.json”)。“]”的内容阅读代码>这可能会起作用-虽然文件在这一点上不是真正的json,但在我看来它有点粗糙/令人讨厌。正如其他人所建议的,标准日志文件格式可能更有意义。您想要做的事情并不容易实现,因为只添加一个“,”也会导致无效的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);
尽管这对于日志记录来说并不理想
如果你真的想那样做,你可能有点作弊。例如,按照您的建议,在每个输入后添加一个“,”,然后使用类似于$data=json\u decode(“[”.file\u get\u contenst(“data.json”)。“]”的内容阅读代码>这可能会起作用-虽然该文件在这一点上不是真正的json,所以在我看来它有点黑客/讨厌。正如其他人所建议的,标准日志文件格式可能更有意义。很多方面都是坏主意,认为它可能是和alt有关?为什么不使用带有5个值的CSV?@apokryfos噢,天哪……很多方面都是坏主意,认为它可能是和alt有关?为什么不使用带有5个值的CSV?@apokryfos噢,天哪……问题是速度变得非常慢。尽管如此,OP还是说了“小型站点”。事实上,我的建议对于日志记录者来说是一个非常糟糕的想法:p正如你所说,通用日志格式更具意义。这在我脑海中闪过,但重复处理它,有点太多了。我想我已经开始看到这种方法的曙光了,就像完全远离它一样。有没有更好的方法来存储数据,使其达到类似的效果,而不存在缺点和复杂性?假设您有一组标准的列,逗号分隔的值很容易使用+您可以自由地将它们附加到日志的末尾,然后写入txt文件或其他文件?谢谢你的帮助,我将研究“通用日志格式”,因为它对我来说毫无意义!问题是这会很快变慢。尽管如此,OP还是说了“小型站点”。事实上,我的建议对于日志记录者来说是一个非常糟糕的想法:p正如你所说,通用日志格式更具意义。这在我脑海中闪过,但重复处理它,有点太多了。我想我已经开始看到这种方法的曙光了,就像完全远离它一样。有没有更好的方法来存储数据,使其达到类似的效果,而不存在缺点和复杂性?假设您有一组标准的列,逗号分隔的值很容易使用+您可以自由地将它们附加到日志的末尾,然后写入txt文件或其他文件?谢谢你的帮助,我将研究“通用日志格式”,因为它对我来说毫无意义!
$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);