JSON diff großer JSON-Daten, wobei ein Teil von JSON als Teilmenge eines anderen JSON gefunden wird

8

Ich habe ein Problem, das ich lösen möchte, um nicht viel manuelle Arbeit als Alternative zu analysieren.

Ich habe 2 JSON-Objekte (die von verschiedenen Web-Service-API- oder HTTP-Antworten zurückgegeben wurden). Zwischen den beiden JSON-Objekten gibt es Schnittdaten, die eine ähnliche JSON-Struktur haben, aber nicht identisch sind. Ein JSON (der kleinere) ist wie eine Untermenge des größeren JSON-Objekts.

Ich möchte alle Intersecting-Daten zwischen den beiden Objekten finden. Eigentlich interessiere ich mich mehr für die gemeinsamen Parameter / Eigenschaften innerhalb des Objekts, nicht wirklich für die tatsächlichen Werte der Parameter / Eigenschaften jedes Objekts. Weil ich schließlich Daten von einer JSON-Ausgabe verwenden möchte, um die andere JSON als Eingabe für einen API-Aufruf zu konstruieren. Leider habe ich nicht die Dokumentation, die den JSON für jede API definiert. : (

Was das schwieriger macht, sind die JSON-Objekte, die riesig sind. Einer überspannt eine Seite, wenn Sie es über Windows Notepad ausdrucken. Die andere umfasst 37 Seiten. Die APIs geben die JSON-Ausgabe als einzelne Zeile komprimiert zurück. Normaler Textvergleich tut nicht viel, ich müsste manuell oder mit Skript neu formatieren, um Objekte mit Zeilenumbrüchen usw. zu trennen, damit ein Textvergleich gut funktioniert. Mit Beyond Compare-Tool versucht.

Ich könnte manuelle Suche / grep machen, aber es ist ein Schmerz, alle Parameter innerhalb des kleineren JSON zu durchlaufen. Könnte Code schreiben, um es zu tun, aber ich müsste auch Zeit dafür aufwenden und testen, ob der Code auch funktioniert. Oder vielleicht gibt es bereits einen fertigen Code dafür ...

Oder kann nach JSON-Diff-Type-Tools suchen. Nach einigen gesucht. Kam über diese:

Ссылка oder Ссылка

Ссылка

beide haben nicht getan, was ich wollte. Vermutlich ist der JSON entweder zu komplex oder zu groß für die Verarbeitung.

Irgendwelche Gedanken zur besten Lösung? Oder ist die beste Lösung für den Augenblick die manuelle Analyse mit grep für jeden Parameter / jede Eigenschaft?

Im Hinblick auf eine Codelösung wird jede Sprache ausreichen. Ich brauche nur einen Parser oder ein Diff-Tool, das macht, was ich will.

Leider kann die JSON-Datenstruktur auch nicht mit Ihnen geteilt werden. Sie kann als vertraulich betrachtet werden.

    
David 09.10.2012, 01:24
quelle

3 Antworten

8

Beyond Compare funktioniert gut, wenn Sie ein JSON-Dateiformat einrichten, um Python , um den JSON hübsch auszudrucken. Beispiel-Setup für Windows:

  1. Installieren Sie Python 2.7.
  2. In Beyond Compare, gehen Sie unter Extras, unter Dateiformate.
  3. Klicken Sie auf Neu. Wählen Sie Textformat. Geben Sie "JSON" als Namen ein.
  4. Unter der Registerkarte Allgemein:
    • Maske: *.json
  5. Unter der Registerkarte Umwandlung:
    • Konvertierung: Externes Programm (Unicode-Dateinamen)
    • Laden: c:\Python27\python.exe -m json.tool %s %t
      • Beachten Sie, dass der zweite Parameter in der Befehlszeile %t sein muss. Wenn Sie zwei %s s eingeben, erleiden Sie einen Datenverlust.
  6. Klicken Sie auf Speichern.
Josh Kelley 19.08.2014 02:28
quelle
2

Jeremy Simmons hat ein besseres Dateiformatpaket erstellt Gepostet im Forum: "JsonFileFormat.bcpkg " für BEYOND COMPARE , für die keine Python-Installation erforderlich ist.

Laden Sie einfach die Datei herunter und öffnen Sie sie mit BC und Sie können loslegen. Also, es ist viel einfacher.

  

JSON-Dateiformat

     

Ich brauchte ein Dateiformat für JSON-Dateien.

     

Ich wollte hübsch drucken & amp; sortiere meinen JSON, um den Vergleich zu vereinfachen.

     

Ich habe mein bcpackage mit meinem abgeschlossenen JSON-Dateiformat verbunden.

     

Die Formatierung erfolgt über jq - Ссылка

     

Requisiten zu   Stephen Dolan für das Dienstprogramm Ссылка .

     

Ich habe eine Nachricht an die Leute von Scooter Software geschickt, in der sie darum gebeten werden   Fügen Sie es in die Seite mit zusätzlichen Formaten ein.

     

Wenn Sie daran interessiert sind, es dort zu sehen, bin ich mir sicher, eine schnelle Antwort auf   Der Thread mit einem Up-Vote würde ihnen helfen, den Wert zu sehen, der es veröffentlicht.   Angehängte Dateien Angehängte Dateien Dateityp: bcpkg JsonFileFormat.bcpkg   (449.8 KB, 58 Ansichten)

    
Alex S 13.08.2015 13:24
quelle
1

Ich habe ein kleines GPL-Projekt, das den Trick für simple JSON machen würde. Ich habe keine Unterstützung für verschachtelte Entitäten hinzugefügt, da es eher eine einfache ObjectDB-Lösung und nicht wirklich JSON ist (trotz der Tatsache, dass es eindeutig davon inspiriert wurde.

Lang und kurz ist die API ziemlich einfach. Erstellen Sie eine neue Gruppe, füllen Sie sie auf und ziehen Sie eine Teilmenge über die von Ihnen benötigten logischen Parameter.

Ссылка

Die API wird grundsätzlich wie - & gt;

verwendet %Vor%

Es gibt tatsächlich Unterstützung für grundlegende Verbindungen und Verknüpfungen, die genau das tun würden, was Sie wollen.

Lang und kurz möchten Sie wahrscheinlich ein Set als Ihren Datentyp haben. Wenn man bedenkt, dass Ihre Vergleiche wahrscheinlich komplex sind, brauchen Sie eine komplexere Menge von Methoden.

Meine einzige Warnung ist, dass es GPL ist. Wenn Ihre Daten vertraulich sind, sind Sie wahrscheinlich nicht an dieser Lizenz interessiert.

    
Daniel B. Chapman 09.10.2012 03:01
quelle

Tags und Links