2013-07-18 2 views
0

jQuery gantt를 WordPress 플러그인으로 사용하려고합니다. 현재 저는 data.json을 편집해야합니다. 나는 PHP 폼을 사용하여 새 항목을 채 웁니다. 양식을 제출할 때 파일에 데이터를 추가하지만 닫는 대괄호 뒤에 데이터가 추가됩니다.Json 파일 편집

[{ 
    ... 

}, 
{ "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); 

나는 또한 설정할 수 없습니다

[{ 
    ... 

}, 
{ "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" 
    } 
    ] 
} 
] 

이 양식을 제출 후에는 다음과 같습니다 대괄호는 value 이후입니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

는 JSON 파일 '로 시작 않는 이유 PHP 코드 – mplungjan

+0

} 위쪽 더 JSON이 있어야 있도록 파일의 끝을 말했듯이,'그 것이다 보여 – DevZer0

+0

PHP 코드를 추가하고 json 출력을 "최적화"했습니다. ;-) – Martin

답변

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

나중에 $ data를 사용하여 기존 항목을 표시합니다. 이 부분에서 나는 그것을 사용하지 않을 것이다. – Martin

+0

그래서 이름을 바꿉니다 .... – mplungjan

+0

감사합니다, 이것은 답변이었습니다. 주제가없는 질문입니다. 새로운 데이터를 추가 한 후 json 파일을 포맷하는 방법에 대해 알고 계십니까? 줄 바꿈과 탭이 있습니까? – Martin

0

값 필드는 객체 대신 객체의 배열입니다 (php 연관 배열의 인코딩은 json 객체입니다). 값이 array (array ("id"=> ... 등)가 필요합니다.

첫 번째 문제는 "values"=> array() 대신 대괄호를 사용합니다. 당신은 json_encoding을 반대로했습니다. 우선 postArray를 데이터에 넣은 다음 json_encode 데이터를 넣습니다. 내 의견에 말했듯이

+0

첫 번째 힌트를 보내 주셔서 감사합니다. 그것은 작동합니다. 죄송합니다,하지만 당신은 "당신의 postArray를 데이터로 푸시"하는 것을 의미합니까? – Martin

+0

json 파일에 새로 생성 된 데이터가 포함되도록 postArray를 데이터에 추가하고 싶습니다. 귀하의 $ 데이터는 배열이므로 array_push ($ data, $ postArray)를 수행 할 수 있습니다. 마지막 json_encode 작업 직전에 작업을 수행하십시오. –