2017-07-12 1 views
-1

Ich bekomme JSON zurück, das mehrere Objekte als Werte eines Arrays einfügt.Überprüfen, ob die Eigenschaft eines Objekts in einem Array existiert

Ich muss feststellen, ob die "Error" -Eigenschaft innerhalb der JSON zurückkommt, aber in der Möglichkeit, die Fehlereigenschaft nicht existiert, will ich keinen Fehler zurück.

Dies ist der dekodierte JSON, mit dem ich komme. JSON könnte so zurückkommen, aber es könnte nicht:

JSON

[{"Error":"1050"}] 

MY PHP

$data = json_decode($json); 
print_r($data); 

, die zurückgibt:

Array 
(
    [0] => stdClass Object 
     (
      [Error] => 1050 
     ) 

) 
+3

Jedes Codeprobe, das Sie bisher ausprobiert haben? –

+0

Dies ist eine PHP-Frage, also gehen wir davon aus, dass die Daten JSON sind, aber in PHP – Aknosis

+0

zugegriffen habe Ich habe so viele Dinge getestet, die ich gelöscht habe, werde ich zurückverfolgen. Lee sorry ja es ist JSON decodiert – Omar

Antwort

2

Ich denke für Ihr spezifisches Beispiel würden Sie auf den Fehler mit $arr[0]->Error zugreifen, aber die Assoc-Optionen in json_decode bedeutet, dass es darauf ankommt, was Sie json_decode zu tun gefragt.

Das bedeutet, wenn Sie $arr = json_decode($json, true) getan haben, dann würden Sie auf den Fehler mit $arr[0]['Error'] zugreifen, weil der JSON dann immer Objekte in assoziative Arrays dekodiert.

Dies ist ein schönes Beispiel für Mutation und Verwirrung mit JSON und PHP, es ist möglich, dass Sie mit einem assoziativen Array in PHP beginnen, es in JSON und zurück konvertieren und das assoziative Array verlieren. Nur etwas, das man im Auge behalten sollte.

In PHP greifen Sie auf Arrays mit [ eckigen Klammern ] und Objekteigenschaften mit -> den Pfeil. Sie sind nicht austauschbar wie die Klammern und Punktnotationen in JavaScript. Sie müssen also immer darauf achten, ob Ihre Datenstrukturen Objekte oder assoziative Arrays sind.

Wie für die Prüfung, ob die propery vorhanden ist, verwenden Sie isset:

if(isset($arr[0]->Error)) { 
    // handle error 
} 

Nun, ich hasse mit isset wirklich überall, so habe ich eine Nutzenfunktion:

function getProperty($object, $propertyName, $defaultValue = false) 
{ 
    $returnValue = $defaultValue; 

    if (!empty($object)) { 
     if (is_array($object)) { 
      if (isset($object[$propertyName])) { 
       $returnValue = $object[$propertyName]; 
      } 
     } else { 
      if (isset($object->$propertyName)) { 
       $returnValue = $object->$propertyName; 
      } 
     } 
    } 

    return $returnValue; 
} 

, die in Mittel meiner Code, ich mache:

if(($error = getProperty($arr[0], 'Error')) === false) { 
    // process $error 
} 

... aber das war aus immer wollen un getragen initialisierte Werte erhalten Standardwerte, wenn sie die meiste Zeit nicht vorhanden waren. (Die Funktion ist so groß, weil sie auch für Objekte und Arrays funktioniert.)

+0

Aber auf diese Weise, in der Möglichkeit, dass der JSON diese Fehlereigenschaft nicht zurückgibt, bekomme ich zurück Hinweis: Undefinierte Eigenschaft: stdClass :: $ Error - Ich muss nur überprüfen, ob es dort aber wenn ich manuell auf die Eigenschaft als Fehler I verweisen erhalten einen Fehler zurück, wenn es nicht existiert. – Omar

+0

Das ist es, danke! – Omar

-1
$someobject = json_decode($yourjsongoeshere); 

if(isset($someobject["Error"])){ 
    echo ($someobject["Error"]); 
} 
0

Sie json_decode verwenden könnte mit der Variable, die deine ret enthält urned JSON und dann array_key_exists verwenden, um zu überprüfen, ob das Objekt den Fehlerschlüssel enthält.

array_key_exists("error", $jsonArray) 

Ähnliche Frage zu How to check if an array element exists? scheint es.

+0

array_key_exists ("Error", $ data); Das gibt nichts zurück. – Omar

+0

ist die Variable $ data, die sich auf das erste Objekt innerhalb des Arrays (Index 0) bezieht (nach Ihrem Beispiel)? $ jsonArray [0] sollte das stdClass-Objekt zurückgeben – Xamthi

+0

Sie müssten das Objekt in ein Array umwandeln. –

0

Technisch könnten Sie das Objekt in ein Array umwandeln und array_key_exists() verwenden. Es ist nicht die eleganteste Lösung, aber es wird funktionieren.

$json = '[{"Error":"1050"}]'; 

$j = json_decode($json); 


if (array_key_exists(0, $j)) { 

    if (array_key_exists('Error', (array)$j[0])) { 
     // It exists 
    } 
} 
Verwandte Themen