从POST数据在PHP中生成json
我需要通过url post数据更新对象的json列表。例如,网址:从POST数据在PHP中生成json
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 efectively就像我做想:
[{"name":"Peter","surname":"Brown"}]
我的问题是,我怎么能为了构建一个像这样的数组,可以增加json:
[{"name":"Peter","surname":"Brown"}]
[{"name":"newname","surname":"newsurname"}]
// and so on
每次用户使用带有新参数的url。
是否需要写入文件或数据库?任何提示将被折衷。
这个想法是,任何用户都可以使用url添加一些dat。我尝试将json存储到场中,但存储仅在当前会话中持久。
<?
/* 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(!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
将删除与
项,其余项目将是:
0: "[{\"name\":\"Peter\",\"surname\":\"Brown\"}]" 1: "[{\"name\":\"newname\",\"surname\":\"newsurname\"}]" 3: "[{\"name\":\"John\",\"surname\":\"Adams\"}]" 4: "[{\"name\":\"Thomas\",\"surname\":\"Jefferson\"}]"
对我来说,这是令人难以置信的有效。并且重置命令非常有用。是否可以删除特定条目?反正非常感谢这么快的答案! – doxsi
当然,你想如何参考条目?换句话说,你想怎么做? – jedwards
当我oborn一个单一的JSON,如: {“persons”:[{“name”:“Peter”,“surname”:“Brown”},{“name”:“Peter2”,“surname”:“newsurname1” }, {“name”:“Peter3”,“surname”:“Brown”},{“name”:“Peter4”,“surname”:“newsurname”}] } 是否可以只擦除一个? – doxsi
只是让用户的嵌套数组:
$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"}]
这里的问题似乎是如何保存/检索其他用户。由于只有一个用户通过'GET'发送。所以嵌套数组是一个好主意,但是询问他应该在哪里保存这个数据,所以每次都会被加载。 –
我认为这将是最简单的数据存储在一个会话中,这样的事情:
<?php
session_start();
if (isset($_GET['name'])) {
$_SESSION['json'][] = $_GET;
}
echo json_encode($_SESSION['json']);
?>
编辑:您可能希望在将$ _GET数组存储在会话中之前过滤$ _GET数组,以便不存储不需要存储的值。
编辑:当然,如果你想保存这个数据多个会话,你需要使用文件或数据库(或可能是一个cookie)。这完全取决于你想要对信息做什么。
你会需要在一些地方保存旧的参数。每次加载URL时,都会重新加载PHP,而且上次没有记忆(除'$ _SESSION'和'$ _COOKIE'外)。数据库听起来不错。 –
是的,您需要将旧数据存储在文件/ db/session中,因为每当用户通过url提交参数时,整个页面将被重新生成,并且您的变量将被初始化 – manix
您想要的究竟是什么*做?你想永久保存这些名字吗?暂时?它们被用于什么? –