无法将json文件中的数据提取到php变量中
我正在使用Giscloud的RESTAPI获取json,其中包含我的web应用程序所需的一些信息。问题是,我似乎不可能使用相应的php函数从该json获取和/或解码任何数据。我认为这与json文件的结构有关 这是json文件(某些字段已编辑): 这些是我试图解码这个json并将其放入变量的不同方式无法将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
$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\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?什么版本的phpalThroughphp_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'];