Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在将Json写入现有文件.Json,但不带“;“语法错误”;_Javascript_Php_Arrays_Json - Fatal编程技术网

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);