【问题标题】:json_decode does not return array in phpjson_decode 在 php 中不返回数组
【发布时间】:2015-06-10 09:12:03
【问题描述】:

当我试图将来自服务器的 json 返回解析为 php 中的数组时,我遇到了一个问题。这是我的代码...

<?php
    mb_internal_encoding('UTF-8');  
    $url = 'http://localhost/busexpress/api/v1/mobile_user_register/mobile_user_register/retrieve.json';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    //$data="'".$data."'";
    echo $data;
    curl_close($ch);

    //$trimspace = preg_replace('/\s+/', '', $data); 
    //echo $trimspace;

    $jdata = json_decode($data, true);
    print_r $jdata; 

?>

这是修剪空间后的json。我也想用 json_decode() 将它转换为 int 数组,但没有结果返回。我认为这个json是有效的。并建议。这是我第一次尝试从服务器提供网络服务。

谢谢

 '{
"status": "1",
"user": [        
    {
        "id": "27",
        "name": "kktt",
        "phone_no": "1239293",
        "activate_code": "0d08ed",
        "deposit": "0",
        "created": "2015-06-0316:35:08",
        "updated": "1110-11-3000:00:00",
        "status": "0"
    },
    {
        "id": "28",
        "name": "kktt",
        "phone_no": "1239293",
        "activate_code": "fb4876",
        "deposit": "0",
        "created": "2015-06-0316:37:14",
        "updated": "1000-01-0100:00:00",
        "status": "0"
    }
  ]
}'

---------编辑---------

根据您的建议,我评论修剪空间和正确的 json 格式。并回显 $data; .....

{
"status": "1",
"user": [        
    {
        "id": "27",
        "name": "kktt",
        "phone_no": "1239293",
        "activate_code": "0d08ed",
        "deposit": "0",
        "created": "2015-06-0316:35:08",
        "updated": "1110-11-3000:00:00",
        "status": "0"
    },
    {
        "id": "28",
        "name": "kktt",
        "phone_no": "1239293",
        "activate_code": "fb4876",
        "deposit": "0",
        "created": "2015-06-0316:37:14",
        "updated": "1000-01-0100:00:00",
        "status": "0"
    }
  ]
}

解码数组中没有任何数据。

 $jdata = json_decode($data, true);
 print_r $jdata; 
 echo "user status -> ". $jdata["status"];

当我将该 json 和硬代码复制到一个字符串中时,再次对其进行解码,它对我有用。请看我的测试代码....

$data =' {"status":"1","mobile_user":[{"id":"1","name":"saa","phone_no":"09978784963","activate_code":"","deposit":"0","created":"2015-05-29 00:00:00","updated":"0000-00-00 00:00:00","status":"1"},{"id":"3","name":"ttr","phone_no":"090930499","activate_code":"","deposit":"0","created":"2015-06-01 00:00:00","updated":"0000-00-00 00:00:00","status":"0"}]}';
$data = json_decode($data,true);
$status = $data['status'];
$mobile_user = $data['mobile_user'];
$id = $mobile_user[0]["id"];
$name = $mobile_user[0]["name"];
echo "id -> ". $id ."<br>";
echo "name -> ". $name;

任何建议请!

【问题讨论】:

    标签: php json


    【解决方案1】:

    我认为你的 json 格式不正确。删除$data="'".$data."'";

    如果有json error,可以查看。

    $trimspace = preg_replace('/\s+/', '', $data); 是不必要的。

    【讨论】:

    【解决方案2】:

    json_decode 通常返回一个object,所以我认为您的代码在这里没有错误。

    $arrayObject = new ArrayObject($object);
    $array = $arrayObject->getArrayCopy();
    

    这是您可以将其转换为array 的方法。它适用于 PHP 5.3+

    【讨论】:

      【解决方案3】:

      试试这个

        $jdata = json_decode($trimspace, true);
           print_r($jdata);
      

      【讨论】:

        【解决方案4】:

        首先,您的 json 格式错误。从文件的开头和结尾删除“”。 $data 的内容应该是这样的:

        {
        "status": "1",
        "user": [        
            {
                "id": "27",
                "name": "kktt",
                "phone_no": "1239293",
                "activate_code": "0d08ed",
                "deposit": "0",
                "created": "2015-06-0316:35:08",
                "updated": "1110-11-3000:00:00",
                "status": "0"
            },
            {
                "id": "28",
                "name": "kktt",
                "phone_no": "1239293",
                "activate_code": "fb4876",
                "deposit": "0",
                "created": "2015-06-0316:37:14",
                "updated": "1000-01-0100:00:00",
                "status": "0"
            }
          ]
        }
        

        第二个 $jdata 是一个关联数组。您无法使用 echo 打印其内容。而是这样做

        print_r($jdata);
        

        第三,您不需要删除空格。在生成 json 的脚本中执行此操作,否则只需直接解析带有空格的 json。

        【讨论】:

        • @Bjarnstroem,感谢您的回答,我再次编辑了我的问题,您能否帮我重新检查一下。
        • @SAWAUNG 嘿,我建议您在发帖之前阅读 PHP 文档... print_r 需要 () 围绕参数。所以不要写 print_r $jdata;但是 print_r($jdata);
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-15
        • 2012-10-04
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        相关资源
        最近更新 更多