Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将json文件中的数据提取到php变量中_Php_Json_Curl_Json Deserialization - Fatal编程技术网

无法将json文件中的数据提取到php变量中

无法将json文件中的数据提取到php变量中,php,json,curl,json-deserialization,Php,Json,Curl,Json Deserialization,我正在使用Giscloud的RESTAPI获取json,其中包含我的web应用程序所需的一些信息。问题是,我似乎不可能使用相应的php函数从该json获取和/或解码任何数据。我认为这与json文件的结构有关 这是json文件(某些字段已编辑): 这些是我试图解码这个json并将其放入变量的不同方式 $json = curl_exec($ch); // Number 1 $data = var_dump(json_decode($json)); echo $data['data'][0]['id

我正在使用Giscloud的RESTAPI获取json,其中包含我的web应用程序所需的一些信息。问题是,我似乎不可能使用相应的php函数从该json获取和/或解码任何数据。我认为这与json文件的结构有关

这是json文件(某些字段已编辑):

这些是我试图解码这个json并将其放入变量的不同方式

$json = curl_exec($ch);

// Number 1
$data = var_dump(json_decode($json));
echo $data['data'][0]['id'];
exit;

// Number 1 returns
object(stdClass)[21]
    public 'code' => string 'FATAL' (length=5)
    public 'msg' => string 'Internal error' (length=14)

// Number 2
$data = json_decode($json,true);
echo $data['data'][0]['id'];

// Number 2 returns
PHP Undefined index: data
我尝试过其他几个类似的功能,比如print\u r。或者在那里和这里更改一些值,但没有任何效果

我将非常感谢您在这方面的帮助

一些额外信息:

  • 卷曲没有问题。它执行正确
  • 是的,服务器使用json文件进行应答 更新

  • 使用
    json\u last\u error()
    (不需要参数)我能够消除bug。函数根据错误类型返回一个int。我的是
    0
    ,这意味着没有错误
  • 我想我已经没有这个想法了
  • 松开仅用于调试的
    var\u dump()
    ,它将阻止
    json\u decode()
    json\u decode()返回PHP对象

    然后使用正确的对象语法来寻址该对象

    $json = curl_exec($ch);
    
    $data = json_decode($json);
    // debug code
    if ( json_last_error() > 0) {
        echo json_last_error_msg();
    } else
        // this should print the data structure
        print_r($data);
    }
    // end debug code
    
    echo $data->data[0]->id;
    
    如果您想从所有发生的事件中获得所有的
    id
    ,您可以这样做

    $json = curl_exec($ch);
    
    $data = json_decode($json);
    foreach ($data->data as $idx => $obj ){
        echo "Occurance $idx = " . $obj->id;
    }
    

    对象语法:

    $json = curl_exec($ch);
    
    $json_data = json_decode($json);
    
    foreach ( $json_data->data as $data_item){
      echo '<p>ID: ' . $data_item->id . ' -- Name: ' . $data_item->name . '</p>';
      }
    
    $json=curl\u exec($ch);
    $json_data=json_decode($json);
    foreach($json_data->data as$data_item){
    回显“ID:”.$data\u item->ID.--Name:”.$data\u item->Name.

    ”; }
    数组语法:

    $json = curl_exec($ch);
    
    $json_data = json_decode($json);
    
    foreach ( $json_data->data as $data_item){
      echo '<p>ID: ' . $data_item->id . ' -- Name: ' . $data_item->name . '</p>';
      }
    
    通过向json_decode()添加第二个参数TRUE,以关联数组的形式获取数据

    $json=curl\u exec($ch);
    $data\u array=json\u decode($json,true);
    foreach($data_数组['data']作为$item){
    回显'ID:'.$item['ID'].--Name:'.$item['Name'.'.

    '; }
    在这种情况下,我不希望使用cURL,您可以使用

    file_get_contents 
    
    下面是一个简单的代码

    $userdata = json_decode(file_get_contents("JSON_URL_GOES_HERE"), true)
    $u_ID = $userdata['data'][0]['id'];
    
    等等
    请参阅:

    JSON字符串验证(使用
    jsonlint.com
    )您的代码为我返回“已编辑”,这是正确的。您正在解码到StdClass,但将对象用作关联数组。。。json_decode默认为stdClass:请看我在第一个示例中尝试过。它向我抛出了一个错误:
    未定义属性:stdClass::$data
    在我看来,
    json\u decode()
    在进程中对json中的对象属性做了一些事情,比如修改它们的名称或其他什么,因为在回显我想要的值时,似乎不知道该值是否存在。顺便说一句:我使用的是WAMP服务器,既然你也是一个Wamp用户,你不可能是一个缺少的php扩展吗?没有
    json.*
    函数在核心,我相信你使用的是什么版本的WAMPServer?什么版本的phpalThrough
    php_curl
    是可选的?您是否激活了“php_curl”和
    php_openssl
    ?我需要使用curl。我有一个API密钥。你可以使用完整的url与你的API密钥,并获得相同的数据,这很容易!!
    $userdata = json_decode(file_get_contents("JSON_URL_GOES_HERE"), true)
    $u_ID = $userdata['data'][0]['id'];