2017-01-25 11 views
1

私は現在、クリックを保存しています次のコードを使用してJSONファイルに座標:保存データ - PHP

onmouseup = function(e){ 
    var Clicks = {}; 
    Clicks.state = { 
    cX: e.clientX, 
    cY: e.clientY, 
    } 
    $.ajax({ 
    type : "GET", 
    url : "PHP/save_json.php", 
    data : { 
     state : JSON.stringify(Clicks.state) 
    } 
    }); 
} 

<?php 
$myFile = "JSON/clicks.json"; 
$fh = fopen($myFile, 'a') or die("can't open file"); 
$stringData = $_GET["state"]; 
fwrite($fh, $stringData); 
fclose($fh) 
?> 

は、しかし、上記のコードで、私は、座標を保存しています

{ "CX":467、 "CY":374}、{ "CX":56、 "CY":474}、次の間違った形式で

誰に座標を保存するために私を助けてください別のJSONエントリではなくJSON配列ですか?そして、対象物へのあなたの文字列を変換戻ってそれを変換し

{ 
    "ID":["1","2"], 
    "cX":["467","56"], 
    "cY":["374","474"] 
} 

答えて

-1

使用json_encode:

私は以下のようにファイルをしたいと思いますが、座標は、ファイル内の既存のJSON配列に追加されましたjson_decodeとJSON_PRETTY_PRINTオプションを使用して文字列に変換します。

$stringData = json_decode(json_encode($_GET["state"]), JSON_PRETTY_PRINT); 

http://php.net/manual/en/function.json-encode.php

+0

これはJSONの実際の構造を変更するものではありません。彼の与えられた成果と彼がそれが見えるようにしたいものを見てください。彼はオブジェクトを間違って作成しました。 –

+0

申し訳ありません - 質問を誤解しました。 – markt

1

あなたは、新しいデータを追加して、ファイルに戻って保存し、アレイへの負荷データを必要とします。

文字列に数値を保存する必要はありません。 これらのコードは、存在しない場合は新しいファイルを作成します。

<?php 
// test input data 
if(isset($_GET['state']['cX']) && 
    isset($_GET['state']['cY']) && 
    is_numeric($_GET['state']['cX']) && 
    is_numeric($_GET['state']['cY'])) 
{ 
    // ok 
} else { 
    exit('Bad data format'); 
} 

$myFile = __DIR__ . "/JSON/clicks.json"; 

// step 1, load data from file to array 
$array = file_exists($myFile) ? 
    json_decode(file_get_contents($myFile), true) : 
    []; 

// step 2, add data to array 
$array['ID'][] = isset($array['ID']) ? (count($array['ID']) + 1) : 1; 
$array['cX'][] = (int) $state['cX']; 
$array['cY'][] = (int) $state['cY']; 

// step 3, save array back to file 
file_put_contents($myFile, json_encode($array)); 

また、ファイルを追加できる他のファイル形式を使用することもできます。静的構造化データのための最も簡単な形式は、あなたがする必要がどのようなCSV

+0

私は提供されたコードを実装しましたが、 "Bad data format"を受け取りました。 Clicks.stateの作成方法を変更する必要はありますか? – KrisF

+0

私は文字列としてcXとcYを渡しているJSON.stringify(Clicks.state)に問題があると思います – KrisF

1

可能性がある:

  • オープンclicks.jsonファイル全体の内容をお読みください。
  • json_decodeを使用してstdClassのインスタンスにします。これは、通常のPHP関数と構文を使用して変更できるPHPオブジェクトを提供します。
  • クライアントから受け取ったJSONにjson_decodeを使用します。
  • 使用array_pushは再び$fileJsonをエンコードするために(array_push($fileJson->cX, $clientJson->cX);のようなもの)のファイルに保存された配列
  • 使用json_encodeに、クライアントから新しい値をプッシュします。
  • ファイルに書き戻します。

これはclicks.jsonファイルが正常にすでにあることを前提とし、すでに作成した配列とJSONにフォーマットなど

1

keyvalueビットの現在の配置を考えると、それは、変換のいくつかの並べ替えていることは明白ですファイルに書き込まれる前にJSONデータに必要です。この変換が行われる場所は間違いなく意見の問題です。しかし、あなたがPHPで以下のJSONデータを受け取ることを想定:

[{"cX":467,"cY":374},{"cX":56,"cY":474}] 

PHPコードは(静的入力で示されている)のように書くことができます。

$myFile = "JSON/clicks.json"; 
$fh = fopen($myFile, 'a') or die("can't open file"); 
$stringData = $_GET["state"]; 
$json_array_source = json_decode($string, true); 

$json_array_target = array(); 
foreach($json_array_source as $key=>$value){ 
    $json_array_target["ID"][] = $key + 1; 
    foreach($value as $sub_key => $sub_value){ 
     $json_array_target[$sub_key][] = $sub_value; 
    } 
} 

$transformed_string = json_encode($json_array_target); 
fwrite($fh, $transformed_string); 
fclose($fh); 

あなたはecho $transformed_string;した場合、あなたが参照してくださいね:

{"ID":[1,2],"cX":[467,56],"cY":[374,474]} 

これはファイルに書き込まれる内容です。

関連する問題