2016-09-26 13 views
0

私は明確でない場合、これは少し難解かもしれません。 arrayを含む.jsonファイルを開きたいのですが、arrayに/ appendを追加しますが、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.jsonanalytics.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

それはかもしれないと思いますか? – Benjamin

+1

5つの値を持つCSVを使用するだけではどうですか? – apokryfos

答えて

2

(あなたの配列はまた、配列にする必要がありますように)

最も簡単な解決策はただだろうあなたの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); 

これはログには理想的ではありませんが。

あなたが本当にそれをやりたければ、おそらくちょっと騙されるかもしれません。つまりあなたが提案したような各enteryの後に "、"を追加してから、$data = json_decode("[".file_get_contenst("data.json")."]");のようなものを読んでください。このファイルは実際にはjsonではありませんが、ちょっとハッキリです。他の人が示唆しているように、標準のログファイル形式はおそらくもっと理にかなっています。

+1

これは非常に速く遅くなる問題です。それでも、OPは「小さなサイト」と言っていました。" –

+1

確かに、私の提案はロガーのためのかなり恐ろしいアイデアです:pあなたが言ったように、一般的なログフォーマットはもっと意味があります – Carl

+0

これは私の心を横断しましたが、それを二重に扱うことはあまりにも多すぎます。 – Benjamin

1

問題があなたがそこに,を持っていたとしても、それは無効なJSONファイルになり、ちょうど行方不明,ではありません。

問題は、JSON(配列とオブジェクト)の両方の "コンテナ"型には終了文字が必要なことです。あなたのケースでは、末尾の文字  —の前にを挿入することに加えて、その末尾にという文字列を追加するだけで、基本配列に別のオブジェクトを追加することができます。

これにより、JSONは理想的ではない形式のログファイルになります。標準のHTTPログファイル形式(common log formatなど)を使用してから、必要に応じてJSONに変換することをお勧めします。ただ「」も無効なJSONにつながるの追加など何がやりたいことは、簡単には達成できない

関連する問題