Json 对象到 PHP 数组 - 不转换
Posted
技术标签:
【中文标题】Json 对象到 PHP 数组 - 不转换【英文标题】:Json Object to PHP array - not converting 【发布时间】:2014-04-02 20:52:10 【问题描述】:我正在尝试获取存储在textarea
中的 json 对象并将其转换为 php 数组。我将 textarea 的值分配给像 $data = $_POST[‘data’]
这样的变量。当我提交文本的值时,我使用json_decode($data, true)
将 JSON 对象转换为 php 数组。但什么也没有发生。似乎没有分配任何内容。我怎样才能实现上述目标?
编辑:我在下面添加了引号并提出了建议但不起作用: DEMO
PHP
if(isset($_POST['submit']))
$data = $_POST['data'];
$personArray = json_decode($data, true);
print_r($personArray);
<textarea name="data">[
"firstName": "Jenny",
"lastName": "LaRusso",
"phone": "(555) 121-2121",
"alt_phone": "(555) 123-4567",
"main1": false,
"main2": true
,
"firstName": "Sensei",
"lastName": "Miyagi",
"phone": "(555) 444-2222",
"alt_phone": "(555) 999-1212",
"main1": true,
"main2": false
]</textarea>
【问题讨论】:
只是好奇。您在提交之前注意到您的 textarea 内容了吗? HTML 看起来不错,但您检查过$_POST['data']
包含的内容吗?这就是您要处理的数据,无论它来自哪里。
第二个。尝试在解析之前打印出您的输入。 var_dump($_POST['data'])
应该这样做。
旁注,在大多数情况下验证非常重要,这里有一个很好的解决 texarea 中 json 验证的方法:***.com/questions/6041741/…
【参考方案1】:
我认为在正确的 JSON 中,键(如 firstName
)也需要用引号括起来。
【讨论】:
我添加了适当的引号,但它不起作用。检查DEMO 你确定吗?根据jsonlint.com,JSON 现在是有效的,所以(下一个)问题可能在其他地方。【参考方案2】:将您的 PHP 代码更改为
if(isset($_POST['data']))
$data = $_POST['data'];
$data = stripslashes($data); //Stripslashes removes all backslashes :)
$personArray = json_decode($data, true);
print_r($personArray);
你的 JSON 对象应该在 textarea 中是这样的
[
"firstName": "Jenny",
"lastName": "LaRusso",
"phone": "(555) 121-2121",
"alt_phone": "(555) 123-4567",
"main1": false,
"main2": true
,
"firstName": "Sensei",
"lastName": "Miyagi",
"phone": "(555) 444-2222",
"alt_phone": "(555) 999-1212",
"main1": true,
"main2": false
]
快乐编码:)
【讨论】:
它不工作,检查DEMO 糟糕,我忘记了在您的文本中使用“”的限制。我已经编辑了上面的答案:)【参考方案3】:您的 PHP 代码似乎没有任何问题。 为了调试,设置 $personArray 后,尝试添加以下两行:
var_dump($data);
var_dump($personArray);
这应该会导致您遇到麻烦。
在这里你可以看到每个返回类型的含义(如果 $returnArray 等于 false):http://php.net/json_decode
【讨论】:
以上是关于Json 对象到 PHP 数组 - 不转换的主要内容,如果未能解决你的问题,请参考以下文章