Wenn Sie Zugriff auf Bash oder eine andere erweiterte Shell haben, können Sie im Prinzip so etwas tun
cmp <(jq -cS . A.json) <(jq -cS . B.json)
unter Verwendung von Unterprozessen. Dadurch wird der JSON mit sortierten Schlüsseln und einer konsistenten Darstellung von Gleitkommazahlen formatiert. Dies sind die einzigen zwei Gründe, warum json mit demselben Inhalt unterschiedlich gedruckt wird. Wenn Sie anschließend einen einfachen Zeichenfolgenvergleich durchführen, erhalten Sie einen ordnungsgemäßen Test. Es ist wahrscheinlich auch erwähnenswert, dass wenn Sie Bash nicht verwenden können, Sie mit temporären Dateien dieselben Ergebnisse erzielen können, es einfach nicht so sauber ist.
Dies beantwortet Ihre Frage nicht ganz, da Sie die gewünschte Frage gestellt ["John", "Bryan"]
und ["Bryan", "John"]
identisch verglichen haben. Da json nicht das Konzept einer Menge hat, sondern nur eine Liste, sollten diese als unterschiedlich betrachtet werden. Reihenfolge ist wichtig für Listen. Sie müssten einen benutzerdefinierten Vergleich schreiben, wenn Sie möchten, dass sie gleichermaßen verglichen werden, und dazu müssten Sie definieren, was Sie unter Gleichheit verstehen. Ist die Reihenfolge für alle Listen oder nur für einige wichtig? Was ist mit doppelten Elementen? Wenn Sie möchten, dass sie als Menge dargestellt werden und die Elemente Zeichenfolgen sind, können Sie sie auch in Objekte wie setzen {"John": null, "Bryan": null}
. Die Reihenfolge spielt beim Vergleich der Gleichheit keine Rolle.
Aktualisieren
Aus der Kommentardiskussion: Wenn Sie eine bessere Vorstellung davon bekommen möchten, warum der JSON nicht derselbe ist, dann
diff <(jq -S . A.json) <(jq -S . B.json)
erzeugt eine besser interpretierbare Ausgabe. vimdiff
Je nach Geschmack ist es möglicherweise vorzuziehen, sich zu unterscheiden.
--argfile a a.json
um--arg a $a
ohne Glück (als $ aa json string). Irgendeine Idee, wie man sich Strings nähert, nicht Dateien?