从POST数据在php中构建一个json

时间:2012-06-26 15:31:24

标签: php json

我需要通过url post data更新对象的json列表。例如,使用url:

http://myweb.com/index.php?name=Peter&surname=Brown

在php中,使用get方法:

$name = $_GET["name"];
$surname = $_GET["surname"];
$json = array();

        $json["nombre"] = $name;
        $json["lat"] = $lat;
        $data[] = $json;

$json_end= json_encode($data);

和json_end有效地按照我想要的方式完成:

[{"name":"Peter","surname":"Brown"}]

我的问题是我如何能够增加json,以便构建一个类似的数组:

[{"name":"Peter","surname":"Brown"}]
[{"name":"newname","surname":"newsurname"}]
// and so on

每次用户使用带有新参数的网址时。

我是否需要写入文件或数据库?任何提示都会被贬低。

这个想法是任何用户都可以使用url添加一些数据。我试图将json存储到fiel,但存储仅在当前会话中持久。

3 个答案:

答案 0 :(得分:2)

只需创建一个嵌套的用户数组:

$data = array (
    0 => array("name"=>"Peter","surname"=>"Brown"),
    1 => array("name"=>"newname","surname"=>"newsurname")
);

echo json_encode($data);

// [{"name":"Peter","surname":"Brown"},{"name":"newname","surname":"newsurname"}]

答案 1 :(得分:2)

<?
/* This needs to be at the top of your file, without ANYTHING above it */
session_start();

/* ... */

if(!array_key_exists('entries', $_SESSION))
{
    $_SESSION['entries'] = array();
}

$_SESSION['entries'][] = array("name" => $_GET["name"], "surname" => $_GET["surname"]);

$json_string = json_encode($_SESSION['entries']);

这会生成一个JSON。但是我不知道你是否有意,但你的输出是一系列独立的JSON。您可以通过将上面的最后一行替换为:

来完成此操作
$json_string = '';
foreach($_SESSION['entries'] as $entry){ 
    $json_string.= json_encode($entry) . "\n";
}

您可能还想要一种重置/清空数组的方法。在这种情况下,我会改变if测试:

if(!array_key_exists('entries', $_SESSION))

为:

if(!array_key_exists('entries', $_SESSION) || array_key_exists('reset', $_GET))

您可以访问

http://myweb.com/index.php?reset

编辑 如果您在某处添加以下代码:

foreach($_SESSION['entries'] as $id=>$entry){ 
    printf("%2d: %s\n", $id, json_encode($entry));
}

您将获得各自密钥枚举的json元素列表。例如,它可能看起来像:

 0: "[{\"name\":\"Peter\",\"surname\":\"Brown\"}]"
 1: "[{\"name\":\"newname\",\"surname\":\"newsurname\"}]"
 2: "[{\"name\":\"George\",\"surname\":\"Washington\"}]"
 3: "[{\"name\":\"John\",\"surname\":\"Adams\"}]"

如果您随后添加以下代码:

if(array_key_exists('del', $_GET) && is_numeric($_GET['del']))
{
    $key = (int)$_GET['del'];
    if(array_key_exists($key, $_SESSION['entries']))
    {
        unset($_SESSION['entries'][$key]);
    }
    else
    {
        printf('<strong>ERROR: $_GET['del'] = %d but $_SESSION['entries'][%d] doesn't exist.</strong>', $key, $key);
    }
}

您可以通过将id指定为del GET参数来删除单个json条目。

例如,

http://myweb.com/index.php?del=2

会删除与'[{"name":"George","surname":"Washington"}]';

对应的条目

剩下的条目是:

 0: "[{\"name\":\"Peter\",\"surname\":\"Brown\"}]"
 1: "[{\"name\":\"newname\",\"surname\":\"newsurname\"}]"
 3: "[{\"name\":\"John\",\"surname\":\"Adams\"}]"
 4: "[{\"name\":\"Thomas\",\"surname\":\"Jefferson\"}]"

答案 2 :(得分:1)

我认为将数据存储在会话中是最容易的,例如:

<?php
    session_start();

    if (isset($_GET['name'])) {
        $_SESSION['json'][] = $_GET;
    }

    echo json_encode($_SESSION['json']);
?>

编辑:您可能希望在将$ _GET数组存储在会话中之前对其进行过滤,这样就不会存储不应存储的值。

编辑:当然,如果要将此数据保存到多个会话中,则需要使用文件或数据库(或者可能是cookie)。这一切都取决于你想对信息做些什么。