使用php

时间:2019-03-20 16:24:09

标签: php json

这比我找到的其他答案或我自己可以想到的其他答案要具体一点。

我的json文件完全包含

[ "box", "tube" ]

仅此而已。使用这样格式化的json数据,我可以获得所需的确切结果。

我想做的是能够使用PHP将更多内容附加到json文件中。 我看过:

<?php
    session_start();
    if(isset($_POST['add'])){
        $data = file_get_contents('members.json');
        $data_array = json_decode($data);
        //data in our POST
        $input = array(
            'id' => $_POST['id'],
            'firstname' => $_POST['firstname'],
            'lastname' => $_POST['lastname'],
            'address' => $_POST['address'],
            'gender' => $_POST['gender']
        );
        //append the POST data
        $data_array[] = $input;
        //return to json and put contents to our file
        $data_array = json_encode($data_array, JSON_PRETTY_PRINT);
        file_put_contents('members.json', $data_array);
        $_SESSION['message'] = 'Data successfully appended';
    }
    else{
        $_SESSION['message'] = 'Fill up add form first';
    }
    header('location:index.php');
?>

我的问题是我不了解如何在本例中使用此示例,因为我的json数据未为其单个数组使用键。我是否只需要放弃并找到一种使用命名键的方法来获取所需结果的方法,还是有一种方法可以使json数据保持所需的格式,还可以向其添加更多数据? >

3 个答案:

答案 0 :(得分:0)

如果您真的相信这是您想要的,那么这对您有好处吗

<?php
    session_start();
    if(isset($_POST['add'])){
        $data = file_get_contents('members.json');
        $data_array = json_decode($data);
        //data in our POST

        $data_array[] = $_POST['id'];
        $data_array[] = $_POST['firstname'];
        $data_array[] = $_POST['lastname'];
        $data_array[] = $_POST['address'];
        $data_array[] = $_POST['gender'];

        $data_array = json_encode($data_array, JSON_PRETTY_PRINT);

        file_put_contents('members.json', $data_array);
        $_SESSION['message'] = 'Data successfully appended';
    }
    else{
        $_SESSION['message'] = 'Fill up add form first';
    }
    header('location:index.php');
?>

假设您希望像这样从$ _POST获得所有数据项,您可以对此感到有些惊讶。

<?php
    session_start();
    if(isset($_POST['add'])){
        $data = file_get_contents('members.json');
        $data_array = json_decode($data);
        //data in our POST

        foreach ($_POST as $v) {
            $data_array[] = $v;
        }

        $data_array = json_encode($data_array, JSON_PRETTY_PRINT);

        file_put_contents('members.json', $data_array);
        $_SESSION['message'] = 'Data successfully appended';
    }
    else{
        $_SESSION['message'] = 'Fill up add form first';
    }
    header('location:index.php');
?>

答案 1 :(得分:0)

上面的代码隐含着member.json包含一个JSON数组-就像您想要的那样。它获取该数组,对其进行解码,创建一个新的复杂对象,将该对象分配给$input,然后将其附加到数组的末尾。

除了对象内,不涉及任何键。幸运的是,对象是您不需要的东西。您可以将其替换为简单的字符串值,然后将其附加到数组中:

$data = file_get_contents('members.json');
$data_array = json_decode($data); 
$input = $_POST["newvalue"]; //replace the complex object with a single value
$data_array[] = $input;

...等

在我的示例中,$_POST["newvalue"]将包含一个从浏览器中名为“ newvalue”的文本字段发回的字符串。

这是一个有效的演示(使用硬编码值而不是文件名和POST值,但它演示了原理):http://sandbox.onlinephpfunctions.com/code/68456544d8004b941f7d6603f64de6e0abf02d4e

答案 2 :(得分:0)

要添加到RiggsFolly答案中,您只需创建一个JSON对象数组并以这种方式附加到它:

array_push($data_array, 'newDataToAdd');
file_put_contents('members.json', $data_array);