【问题标题】:PHP's json_decode fails to decode valid JSONPHP 的 json_decode 无法解码有效的 JSON
【发布时间】:2012-10-16 02:10:21
【问题描述】:

所以我有这个 JSON 对象:

[
    {
        "branch_id": "1",
        "issue_id": "1",
        "user_id": "5",
        "parent_id": null,
        "level": "1",
        "name": "troll",
        "description": "yup",
        "add_date": "2012-10-24 20:26:04",
        "children": [
            {
                "branch_id": "2",
                "issue_id": "1",
                "user_id": "5",
                "parent_id": "1",
                "level": "2",
                "name": "sdad",
                "description": "dssfsd",
                "add_date": "2012-10-24 20:52:52",
                "children": [
                    {
                        "branch_id": "4",
                        "issue_id": "1",
                        "user_id": "5",
                        "parent_id": "2",
                        "level": "3",
                        "name": "fdgffd",
                        "description": "ghjjhjghjj",
                        "add_date": "2012-10-25 17:51:53",
                        "children": []
                    }
                ]
            }
        ]
    },
    {
        "branch_id": "3",
        "issue_id": "1",
        "user_id": "5",
        "parent_id": null,
        "level": "1",
        "name": "dgdfg",
        "description": "dfgfgdfg",
        "add_date": "2012-10-24 20:52:52",
        "children": []
    }
  ]

由于某种原因,当我尝试使用 PHP 的 json_decode 对其进行解码时,它不会输出任何内容。该对象不能是无效的,因为 JSONLint 和这个 parser 都能正确解析它并且不会抛出任何错误。 PHP 自己的 json_last_error 方法也不会抛出任何错误。

我认为不存在的输出可能与具有多维数组的对象有关,但我不确定。你怎么看?

编辑

这里有一点背景:

此 JSON 对象是从 this file 检索的。它来自一个(开发中的)API,这个特定的资源从某个“分支集合”返回一个 JSON 对象。 我使用 cUrl 将这个 JSON 对象获取到 PHP,这是它的代码:

$ch = curl_init('http://skibb.it/api/issues/branches?issue_id=1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$branches = curl_exec($ch);
curl_close($ch);

这也应该没有错误,因为它正确地获取了纯 JSON 对象。但是当我尝试时:

$branches = json_decode($branches);
var_dump($branches); //Or print_r($branches);

它只是不输出任何东西,除了 NULL。

最终编辑

是的,这很尴尬。看了代码发现,我在调试阶段不小心在编码过程中留下了一个print_r(),输出的是JSON对象,后面是数字1。不过感谢各位的回复,他们对区分问题的根源很有帮助!

【问题讨论】:

  • 我会尝试从数组中的对象中删除子元素并验证您是否收到输出。
  • 为我工作:codepad.org/7nfvsQS0
  • 你是如何得到这个 JSON 字符串的?
  • 这太疯狂了。我们都使用了相同的 HEREDOC 分隔符。哈。我想有点巧合。 codepad.org/LyRSQNPG
  • 你可能只是想用错了。 $obj = json_decode($yourstring); echo $obj[0]->branch_id; // would display 1

标签: php multidimensional-array json


【解决方案1】:

您的 JSON 没有任何问题。正如你所说,它解析正确。请注意,当您“解码”时,不会输出任何内容。你仍然需要对它做点什么。不要期望在解码后看到转储。

看这里:

http://codepad.org/LyRSQNPG

【讨论】:

    【解决方案2】:

    这是一个示例 json 解码。

    $jsonDayArray    = $_REQUEST['jsonDayArray'];
        $jsonDayArray    = str_replace("\\","",$jsonDayArray);
        $DayArray = array();
        $DayArray = json_decode($jsonDayArray, true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 2013-08-18
      • 2021-09-04
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多