2017-01-05 3 views
1

zu holen Ich benutze Gisclouds REST-API, um einen Json mit einigen Informationen, die ich für meine Web-App brauche, zu greifen. Das Problem ist, dass es unmöglich scheint, dass ich irgendwelche Daten von diesem json mit den entsprechenden PHP-Funktionen abrufen und/oder dekodieren kann. Ich denke, es hat etwas damit zu tun, wie die JSON-Datei strukturiert ist.Unmöglich, Daten aus einer JSON-Datei in PHP-Variable

Dies ist die JSON-Datei (einige Felder bearbeitet):

{ 
    "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 [email protected] +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 [email protected] +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 [email protected] +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}" 
    } 
    ] 
} 

Dies sind die verschiedenen Möglichkeiten, die ich habe versucht, diese json zu entschlüsseln und sie in eine Variable setzen.

Ich habe mehrere andere ähnliche Funktionen wie print_r versucht. Oder ändern Sie einige Werte hier und hier, aber nichts hat funktioniert.

Ich würde sehr viel Hilfe dabei zu schätzen wissen!

einige zusätzliche Informationen:

  1. Es gibt kein Problem mit Curl. Es wird korrekt ausgeführt.
  2. Ja, der Server antwortet mit einer JSON-Datei.

UPDATE

  1. Mit json_last_error() (keine Notwendigkeit von Parametern) Ich debbug konnte. Die Funktion gibt ein int zurück, abhängig von der Art des Fehlers. Meine war 0, was bedeutet, dass es keinen Fehler gibt.
  2. Ich denke, dass mir die Ideen dafür ausgegangen sind.
+0

Der JSON-String validiert (mit 'jsonlint.com') – RiggsFolly

+0

Ihr Code gibt 'edited' für mich zurück, was korrekt ist. –

+0

Sie dekodieren zu einer StdClass, aber verwenden das Objekt als assoziatives Array ... json_decode ist standardmäßig auf stdClass: siehe ** [die Dokumentation hier] (http://php.net/manual/en/function.json-decode .php) ** – YvesLeBorg

Antwort

2

lost das var_dump() das ist nur für die Fehlersuche und es ist stoppping die json_decode() von einem PHP-Objekt aus den json_decode() zurück.

Dann verwenden Sie das richtige Objekt Syntax, um das Objekt

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

Wenn Sie wollen, dass alle id ‚s von allen Vorkommen zu adressieren können Sie tun

$json = curl_exec($ch); 

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

Ich habe es mit Ihrem ersten Beispiel versucht. Es wirft mich diesen Fehler: 'Undefinierte Eigenschaft: stdClass :: $ data' Scheint mir, dass die' json_decode() 'tut etwas mit den Objekteigenschaften in der JSON im Prozess, wie ihren Namen oder etwas ändern, weil Wenn ich den gewünschten Wert zurückgebe, habe ich keine Ahnung, dass dieser Wert existiert. –

+0

Ok Ich überprüfe, dass ich keinen dummen Fehler gemacht habe – RiggsFolly

+0

BTW: Ich benutze WAMP-Server, und da du ein Wamp-Benutzer bist ¿könnte keine fehlende PHP-Erweiterung sein? –

0

Objekt Syntax:

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

Array Syntax:

die Daten als assoziiertes Array Erhalten Sie durch einen zweiten Parameter TRUE json_decode Hinzufügen() php docs

$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

i bevorzugt nicht Curl in dieser Situation zu verwenden, können Sie verwenden

file_get_contents 

so hier ist ein einfacher Code

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

und so weiter siehe: file_get_contents

+0

Ich brauche cURL. Ich habe einen API-Schlüssel. –

+0

Sie können die volle URL mit Ihrem API-Schlüssel verwenden und erhalten die gleichen Daten, es ist einfach !! –

Verwandte Themen