使用PHP编辑JSON文件

时间:2018-11-05 16:26:45

标签: php json

我正在尝试使用php编辑JSON文件,我设置了一个带有表单元素的ReactJS应用。

我的JSON如下

[
    {
        "id": 1,
        "Client": "client 1",
        "Project": "project 1",
        "StartDate": "2018\/11\/02 16:57:35",
        "CompletedDate": "",
        "projectUrl": "project-1"
    },
    {
        "id": 2,
        "Client": "client 2",
        "Project": "project 2",
        "StartDate": "2018\/11\/02 16:57:35",
        "CompletedDate": "",
        "projectUrl": "project-2"
    },
    {
        "id": 3,
        "Client": "client 3",
        "Project": "project 3",
        "StartDate": "2018\/11\/02 16:57:35",
        "CompletedDate": "",
        "projectUrl": "project-3"
    }
]

到目前为止,我有代码可以在文件末尾创建一个新的“项目”。我的PHP如下

if ($_SERVER["REQUEST_METHOD"] == "POST")
{

    try {

        $clientName =  $_POST['clientName'];
        $ProjectName =  $_POST['projectName'];
        $url =  strtolower($_POST['url']);
        $date = date('Y/m/d H:i:s');


        $message = "";
        $url = '../json/projects.json';

        if( file_exists($url) )

        if(file_exists('../json/projects.json'))
        {
            $current_data = file_get_contents('../json/projects.json');  
            $array_data = json_decode($current_data, true);  
            $extra = array(  
                'id' => count($array_data) + 1, 
                'Client' => $clientName, 
                'Project' => $ProjectName, 
                'StartDate' => $date, 
                'CompletedDate' => "",
                'projectUrl' => $projectFileName + ".json"
            );  
            $array_data[] = $extra;  
            $final_data = json_encode($array_data, JSON_PRETTY_PRINT);  
            if(file_put_contents('../json/projects.json', $final_data))  
            {  
                 $message = "sent";  
            }  
            else  
            {
                $message = "notSent";
            }
        }
        else
        {
            $message = "jsonFileNotFound";
        }


        $response = $message;

    } catch (Exception $e) {
        $response = $e->getMessage();
    }

    echo $response;

}

我想出的是如何编辑的,只需单击一下按钮,即可说出“ CompletedDate”值到今天的日期。

我的页面上有一个隐藏的输入字段,其中包含项目ID,因此,我的工作是帮助获取该ID,将其与JSON匹配,然后编辑与该ID匹配的完成日期。

此PHP将使用ajax触发,因此我可以轻松传递ID。

1 个答案:

答案 0 :(得分:1)

使用与已使用的代码相似的代码,可以通过使用ID作为已解码JSON文件的索引来更新相关数据。由于ID 1将是数组的[0]元素,因此请使用日期更新[$id-1]元素...

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    try {

        $id = 2;   // Fetch as appropriate
        $date = date('Y/m/d H:i:s');
        $url = '../json/projects.json';

        if( file_exists($url) )
        {
            $current_data = file_get_contents($url);
            $array_data = json_decode($current_data, true);
            $array_data[$id-1]['CompletedDate'] = $date;
            $final_data = json_encode($array_data, JSON_PRETTY_PRINT);
            if(file_put_contents($url, $final_data))
            {
                $message = "updated";
            }
            else
            {
                $message = "notUpdated";
            }
        }
        else
        {
            $message = "jsonFileNotFound";
        }


        $response = $message;

    } catch (Exception $e) {
        $response = $e->getMessage();
    }

    echo $response;

}

您可能需要调整一些位-尤其是如何获取ID($_GET?)以及所需的任何消息。

我还更新了代码,以更一致地使用$url,而不是在一些地方进行硬编码。