2017-04-16 11 views
1

Ich habe zwei JSON-Dateien. Sie sollten unabhängig von Formatierung und Reihenfolge der Elemente identisch sein.Überprüfen Sie, ob zwei JSON gleichwertig sind

Zum Beispiel diese beiden jsons äquivalent sind, weil Attribute und Arrays gleich sind, nur die Reihenfolge und die Formatierung Typ unterschiedlich sind:

{ 
    "type" : "integer", 
    "values": [ 
    { 
     "value": 1 
    }, 
    { 
     "value": 2 
    } 
    ] 
} 

und

{ 
    "values": [ 
    { "value": 1 }, { "value": 2 } 
    ], 
    "type" : "integer" 
} 

Wenn ich sie in zwei speichern separate Strings und ich vergleiche sie, offensichtlich wird der Vergleich sagen, dass sie anders sind. Stattdessen möchte ich prüfen, ob sie aus einem semantischen Gesichtspunkt gleich sind, und sie sind, weil sie die gleichen Attribute haben und die entsprechenden Arrays die gleichen sind.

Gibt es eine Möglichkeit in C# zu überprüfen, dass diese beiden Json gleichwertig sind, wenn ich sie in zwei separaten Strings speichern?

+1

Deserialize beide und vergleichen Sie die Ergebnisse –

+0

Gibt es eine Möglichkeit, es ohne vorherige Kenntnis des Formats der JSON-Dateien zu tun? Weil ihr Schema nicht vordefiniert ist, und ich sollte es tun können, unabhängig von der Art der Daten, die in jsons enthalten sind. – Jepessen

+1

Überprüfen Sie diese SO Antwort: http://StackOverflow.com/a/31926367/172769 –

Antwort

2

Mit Newtonsoft.Json nuget Paket DeepEquals:

using Newtonsoft.Json.Linq; 

var jsonText1 = File.ReadAllText(fileName1); 
var jsonText2 = File.ReadAllText(fileName2); 

var json1 = JObject.Parse(jsonText1); 
var json2 = JObject.Parse(jsonText2); 

var areEqual = JToken.DeepEquals(json1, json2); 
+0

Weißt du nicht, kann es Sortierung beim Vergleich von JArrays machen? – tsul

+0

@tsul - das ist eine andere Frage. Schreiben Sie es einfach als richtige Frage und nicht als Kommentar. –

Verwandte Themen