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);

html

<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 数组 - 不转换的主要内容,如果未能解决你的问题,请参考以下文章

PHP json_encode转换空数组为对象

PHP json_encode 到 C# 对象无法转换

如何将多维数组转换为json对象[关闭]

把JSON 格式的字符串转换为 PHP数组或对象

php stdClass 到数组

php json_encde 转换空对象和空数组 为json格式 而不是[]