Невозможно извлечь данные из файла json в переменную php

Я использую REST API Giscloud, чтобы получить JSON с некоторой информацией, которая мне нужна для моего веб-приложения. Проблема в том, что кажется невозможным, чтобы я мог получить и / или декодировать любые данные из этого json, используя соответствующие функции php. Я думаю, это как-то связано со структурой файла json.

Это файл json (некоторые поля отредактированы):

{
"type": "maps",
"total": 3,
"page": 1,
"data": [
{
"id": "edited",
"name": "Mapa de Mantención en Linea",
"owner": "edited",
"epsg": "900913",
"active": "1",
"copyright": "",
"proj4": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs",
"units": "meter",
"maxzoom": "0",
"mobileacess": "f",
"bgcolor": "#417893",
"wmsaccess": null,
"modified": 1483563460,
"accessed": 1483563460,
"created": 1483021672,
"description": "",
"maptype": null,
"assets": null,
"rating": "0",
"units_proj4": "meter",
"visited": "31",
"resource_id": "6102219",
"measure_unit": "meter",
"share": "f",
"bounds": "    {\"xmin\":-8027875.3326789,\"xmax\":-7742459.4690621,\"ymin\":-4065685.5344885,\"ymax\":-3929474.7500843}"},
{
"id": "edited",
"name": "Mapa de Operaciones",
"owner": "edited",
"epsg": "900913",
"active": "1",
"copyright": "",
"proj4": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs",
"units": "meter",
"maxzoom": "0",
"mobileacess": "f",
"bgcolor": "#417893",
"wmsaccess": null,
"modified": 1483563473,
"accessed": 1483563473,
"created": 1483021672,
"description": "",
"maptype": null,
"assets": null,
"rating": "0",
"units_proj4": "meter",
"visited": "45",
"resource_id": "6102603",
"measure_unit": "meter",
"share": "f",
"bounds": "{\"xmin\":-8027263.8364526,\"xmax\":-7741847.9728358,\"ymin\":-4075469.474109,\"ymax\":-3939258.6897048}"},
{
"id": "edited",
"name": "Mapa M&IC",
"owner": "edited",
"epsg": "900913",
"active": "1",
"copyright": "",
"proj4": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs",
"units": "meter",
"maxzoom": "0",
"mobileacess": "f",
"bgcolor": "#417893",
"wmsaccess": null,
"modified": 1483563449,
"accessed": 1483563449,
"created": 1483021672,
"description": "",
"maptype": null,
"assets": null,
"rating": "0",
"units_proj4": "meter",
"visited": "35",
"resource_id": "6102604",
"measure_unit": "meter",
"share": "f",
"bounds": "{\"xmin\":-8028181.080792,\"xmax\":-7742765.2171752,\"ymin\":-4074552.2297696,\"ymax\":-3938341.4453654}"}
]
}

Это разные способы, которыми я пытался декодировать этот 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_r. Или измените некоторые значения там и здесь, но ничего не сработало.

Я был бы очень признателен за помощь!

Некоторая дополнительная информация:

  1. Там нет проблем с локон. Это выполняется правильно.
  2. Да, сервер отвечает с помощью файла JSON.

ОБНОВИТЬ

  1. С помощью json_last_error() (нет необходимости в параметрах) Я смог отладить. Функция возвращает int в зависимости от типа ошибки. Мой был 0Это означает, что нет ошибки.
  2. Я думаю, что у меня закончились идеи для этого.

1

Решение

Потерять var_dump() вот только для отладки, и это останавливает json_decode() от возврата объекта PHP из json_decode(),

Затем используйте правильный синтаксис объекта для адресации объекта

$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;
}
2

Другие решения

Синтаксис объекта:

$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>';
}

Синтаксис массива:

Получить данные как связанный массив, добавив второй параметр TRUE в json_decode () PHP документы

$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>';
}
0

я не предпочитаю использовать cURL В этой ситуации вы можете использовать

file_get_contents

так вот простой код

$userdata = json_decode(file_get_contents("JSON_URL_GOES_HERE"), true)
$u_ID = $userdata['data'][0]['id'];

и так далее
увидеть :file_get_contents

0
По вопросам рекламы [email protected]