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

时间:2017-01-05 12:38:56

标签: php json curl json-deserialization

我正在使用Giscloud的REST API来获取json,其中包含我的网络应用所需的一些信息。问题是我似乎不可能使用相应的php函数从该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

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

json_last_error()

我尝试过其他几个类似的功能,比如print_r。或者在这里改变一些值,但没有任何效果。

我很感激你们的帮助!

一些额外信息:

  1. curl没问题。它正确执行。
  2. 是的,服务器用json文件回答。
  3. 更新

    1. 使用0(不需要参数)我能够进行调查。该函数根据错误类型返回一个int。我的{{1}}意味着没有错误。
    2. 我想我已经没想到了。

3 个答案:

答案 0 :(得分:2)

松开var_dump()仅用于调试的内容,它正在阻止json_decode()json_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;
}

答案 1 :(得分:0)

对象语法:

$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()php docs

添加第二个参数TRUE,将数据作为关联数组获取
$json = curl_exec($ch);

$data_array = json_decode($json, true);

foreach ( $data_array['data'] as $item){
  echo '<p>ID: ' . $item['id'] . ' -- Name: ' . $item['name'] . '</p>';
  }

答案 2 :(得分:0)

我不喜欢使用cURL在这种情况下,你可以使用

<p:commandButton id="editCustomerButton" label="+" iconPos="center" action="#{customerListController.methodToGetYourRemainingData}" oncomplete="PF('editCustomerDialog').show()">
    <f:setPropertyActionListener target="#{customerListController.ID}" value="#{customerInList.ID}" />
</p:commandButton>

所以这是一个简单的代码

file_get_contents 

等等 见:file_get_contents