0

jQuery gantt を wordpress プラグインとして使用しようとしています。現在、data.json の編集に行き詰まっています。PHPフォームを使用して新しいアイテムを入力します。フォームを送信すると、ファイルにデータが追加されますが、閉じ角括弧の後ろに追加されます。

[{
  ...

 },
 {  "name"  : "Vermessung"
  , "desc"  : ""
  , "values": [
   {  "id"         : "5"
   , "from"       : "/Date(1363132800000)/"
   , "to"         : "/Date(1368655200000)/"
   , "desc"       : "Vom Beauftragen der Vermessung bis zur tatsächlichen Vermessung"
   , "customClass": "ganttBlue"
   , "label"      : "Vermessung"
  }
  ]
 }
]

フォームを送信すると、次のようになります。

[{
  ...

 },
 {  "name"  : "Vermessung"
  , "desc"  : ""
  , "values": [
      {  "id"         : "5"
       , "from"       : "/Date(1363132800000)/"
       , "to"         : "/Date(1368655200000)/"
       , "desc"       : "Vom Beauftragen der Vermessung bis zur tatsächlichen Vermessung"
       , "customClass": "ganttBlue"
       , "label"      : "Vermessung"
      }
  ]
 }
]{"name":null,"desc":null,"values":{"id":null,"from":null,"to":null,"desc":null,"customClass":null,"label":null}}

これは、json に何かを追加する要求された php コードです。

$file = jQg_BASENAME_DIR.'/inc/data.json';
log_me('This is a message for debugging purposes');

if(isset($_POST['submit'])){

$json = file_get_contents( $file );
$data = json_decode($json);

// convert form data to json format
    $postArray = array(
      "name" => $_POST['name'],
      "desc" => $_POST['desc'],
      "values" => array(
         "id" => $_POST["value_id"],
         "from" => $_POST['value_from'],
         "to" => $_POST['value_to'],
         "desc" => $_POST['value_desc'],
         "customClass" => $_POST['value_class'],
         "label" => $_POST['value_label']
        )
    ); //you might need to process any other post fields you have..

$json = json_encode( $postArray );
array_push($json, $postArray);
// write to file
file_put_contents( $file, $json, FILE_APPEND);

の後に角括弧を確立することもできませんvalue。どうすればこれを修正できますか?

4

2 に答える 2

0

私のコメントで言ったように

$json = file_get_contents( $file );

// $json is now a string 

$data = json_decode($json);

// $data is a PHP object
// So lets call the second array $data->someArray
// since I do not know what it is called looking at your file

// convert form data to PHP array format
    $postArray = array(
      "name" => $_POST['name'],
      "desc" => $_POST['desc'],
      "values" => array(
         "id" => $_POST["value_id"],
         "from" => $_POST['value_from'],
         "to" => $_POST['value_to'],
         "desc" => $_POST['value_desc'],
         "customClass" => $_POST['value_class'],
         "label" => $_POST['value_label']
        )
    ); //you might need to process any other post fields you have..

// $postArray is a PHP object

// $json = json_encode( $postArray ); // do NOT convert here

array_push($data->someArray, $postArray);
$json = json_encode($data);
// write to file
file_put_contents( $file, $json, FILE_APPEND);
于 2013-07-18T09:11:33.833 に答える
0

あなたの値フィールドは、オブジェクトではなくオブジェクトの配列です(php連想配列のエンコーディングはjsonオブジェクトです)。したがって、値に "values" => array() の代わりに角括弧を付けるには、 "values" => array( array("id" => ... etc. ) ) が必要です。

最初の問題については、json_encoding を逆にしました。最初に postArray をデータにプッシュし、次に json_encode データをプッシュします。

于 2013-07-18T08:56:34.927 に答える