2017-02-17 3 views
0

Ich versuche, ein einfaches Schema gegen große JSON-Daten zu validieren. Ich muss nur herausfinden, ob die Eigenschaften, die ich in meinem PHP-Code verwende, in den JSON-Daten vorhanden sind. Ich habe mir einige Bibliotheken angesehen, aber sie scheinen übertrieben zu sein, da sie sogar den Datentyp validieren und ich nur das Vorhandensein von Eigenschaften brauche.JSON-Daten - Validieren von Eigenschaften in PHP

Zum Beispiel: PHP-Variablen Ich verwende: name, age, gender JSON Daten:

{ 
    "Location": "10.2.00", 
    "Name": "Foo", 
    "Age": "30", 
    "Race": "NA", 
    "Gender": "Male" 
} 

So in JSON könnte es zusätzliche Daten sein.

Wie kann ich das Vorhandensein von JSON-Variablen in meinem PHP-Code oder einem anderen JSON-Schema überprüfen?

Antwort

0

Wenn Sie nur überprüfen müssen, ob die Schlüssel aus Ihrem einfachen Schema vorhanden sind, können Sie array_diff_key verwenden.

Definieren Sie Ihr einfaches Schema (bedenken Sie, dass die Schlüssel Groß- und Kleinschreibung.)

$simple_schema = ['Name', 'Age', 'Gender']; 

Decode Ihre großen JSON-Daten (unbedingt das zweite Argument von json_decode verwenden, um ein Array zum Vergleich zu erhalten.)

$json = json_decode($large_json_data, true); 

Dann erhalten Sie den Unterschied mit array_diff_key.

$missing_keys = array_diff_key(array_flip($simple_schema), $json); 

Die array_flip wandelt die Werte Ihrer einfachen Schema Schlüssel für den Vergleich.

Wenn $missing_keys leer ist, waren alle Schlüssel in Ihrem Schema in den großen JSON-Daten vorhanden.

+0

@ Panik nicht, das ist eine wunderschöne Lösung. Die einzige Down-Side, die ich sehe, ist die Groß-/Kleinschreibung. Jedenfalls unsensibel machen? – user3704920

+0

Es ist möglich, es Groß-und Kleinschreibung zu beachten, aber ich denke nicht, dass es mit array_diff_key möglich wäre. Sie müssten wahrscheinlich beide Schlüssel in einen gemeinsamen Fall kopieren und umwandeln. Wenn Sie wüssten, dass alle Schlüssel in den großen Daten in einem bestimmten Fall wären, könnten Sie Ihre einfachen Schema-Schlüssel vorher in diesen Fall konvertieren. –

0

So mit der Zugabe der Fall Unempfindlichkeit:

$props = array('name', 'age', 'gender'); 
$array = array_map('strtolower', array_keys(json_decode($json, true))); 

if(empty(array_diff($props, $array))) { 
    echo "All properties exist"; 
} 
  • Verwenden Sie ein Array von Kleineigenschaftsnamen
  • die Schlüssel aus dem JSON Get und
  • Überprüfen Sie, ob die Differenz zu strtolower() Karte ist empty() bedeutet, dass alle Eigenschaften existieren