2016-09-26 86 views
0

如果我不清楚,这一个可能会有点棘手。我想开一个.json文件,其中包含了array并添加/ appendarray但我不断进入的格式问题与array。我首先想到这需要是PHP,但我不明白为什么它现在不能成为JS。在没有“语法错误”的情况下将Json写入现有文件.json

可能有人会问,为什么不是我使用一个数据库,它只是不会为我想要做的工作。我只是在没有数据库的情况下将数据存储在现场的文件中。

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" 
    } 
] 
+1

这么多方面的坏主意 – RiggsFolly

+1

认为它可能和alt? – Benjamin

+1

为什么不直接使用具有5个值的CSV? – apokryfos

回答

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

问题是这个变得很慢。尽管如此,OP还是说“小地盘”。“ –

+1

确实,我的建议对于一个记录器来说是一个非常糟糕的主意:p就像你说的,常见的日志格式使得它更有意义 – Carl

+0

这让我想起了双重处理它,有点太过分了。使用这种方法看到光线,就像完全摆脱光线一样,有没有更好的方法可以将数据存储到类似的效果中,而不会出现垮台和复杂性? – Benjamin

1

问题不只是一个缺少,,即使你有一个,那里,这将是一个无效的JSON文件。

你的问题是,无论是“容器”类型JSON有(阵列和对象)的需要终止字符。添加到在是终止字符  —你的情况前面插入的手段,在尾随]的前面,这样你可以添加另一个目的是基本阵列。

这使得JSON成为日志文件格式不太理想的格式。建议使用任何标准HTTP日志文件格式,例如common log format,然后根据需要转换为JSON。

相关问题