2012-10-09 16 views
8

Mam problem, który chciałbym rozwiązać, aby nie musiał spędzać dużo pracy ręcznej, aby analizować jako alternatywę.JSON diff dużych danych JSON, znajdowanie JSON jako podzestawu innego JSON

Mam 2 obiekty JSON (zwracane z różnych interfejsów API usług internetowych lub odpowiedzi HTTP). Między dwoma obiektami JSON są przecinające się dane i mają one podobną strukturę JSON, ale nie są identyczne. Jeden JSON (mniejszy) jest jak podzbiór większego obiektu JSON.

Chcę znaleźć wszystkie interlinujące dane między dwoma obiektami. Właściwie bardziej interesują mnie wspólne parametry/właściwości w obiekcie, a nie rzeczywiste wartości parametrów/właściwości każdego obiektu. Ponieważ chcę ostatecznie użyć danych z jednego wyjścia JSON do skonstruowania innego JSON jako wejścia do wywołania API. Niestety, nie mam dokumentacji, która definiuje JSON dla każdego interfejsu API. :(

To, co sprawia, że ​​jest to trudniejsze, to obiekty JSON są ogromne.Jedna strona obejmuje stronę, jeśli wydrukujesz ją za pomocą Notatnika systemu Windows, pozostałe strony 37 stron Interfejsy API zwracają wynik JSON skompresowany jako pojedyncza linia. porównaj nie robi wiele, musiałbym ponownie sformatować ręcznie lub w/skrypt, aby rozbić obiekt w/znaki nowej linii itp. dla porównania tekstu, aby działał dobrze. Próbowano za pomocą narzędzia Beyond Compare

Mogę zrobić instrukcję search/grep, ale to jest trudny cykl, aby przechodzić przez wszystkie parametry wewnątrz mniejszego JSON.Może napisać kod, aby to zrobić, ale musiałbym też poświęcić czas na to i sprawdzić, czy kod działa również. zrobiłem kod już za to ...

Lub może szukać narzędzi typu diff typu JSON. Szukano niektórych. Natknąłem nich:

https://github.com/samsonjs/json-diff lub https://tlrobinson.net/projects/javascript-fun/jsondiff

https://github.com/andreyvit/json-diff

zarówno udało się zrobić to, co chciałem. Przypuszczalnie JSON jest albo zbyt skomplikowany, albo zbyt duży, aby go przetwarzać.

Jakieś przemyślenia na temat najlepszego rozwiązania? A może najlepszym rozwiązaniem na razie jest ręczna analiza w/grep dla każdego parametru/właściwości?

Pod względem rozwiązania kodu, zrobi to każdy język. Potrzebuję tylko narzędzia analizatora składni lub narzędzia różnicowego, które zrobi to, co chcę.

Niestety, nie możemy udostępnić struktury danych JSON z tobą, może to być uznane za poufne.

+0

zdajesz sobie sprawę, że można łatwo całkiem-print dane JSON z nowymi liniami i wcięcia? –

+0

FWIW: 37 wyświetlanych stron tekstu JSON jest dalekie od "ogromnych"; Nie uznałbym tego wydarzenia za "duże", ale raczej "nie małe". –

+0

@ user1689607, jak ładnie drukować dane JSON? Nie jestem programistą stron internetowych ajax/jquery/js, nie zrobiłem web dev w najnowszej technologii, tylko zrobił nie ajax wiele lat temu. Właśnie testuję aplikacje w dzisiejszych czasach. – David

Odpowiedz

1

Mam mały projekt GPL, który może pomóc dla prosty JSON. Nie dodałem obsługi zagnieżdżonych obiektów, ponieważ jest to raczej proste rozwiązanie ObjectDB, a nie JSON (mimo, że było to wyraźnie zainspirowane:

Długie i krótkie API jest całkiem proste. Utwórz nową grupę, wypełnić go, a następnie wyciągnij podzbiór przez co logiczne parametry trzeba

https://github.com/danielbchapman/groups

API służy w zasadzie podoba. ->

SubGroup items = group 
        .notEqual("field", "value") 
        .lessThan("field2", 50); //...etc... 

tam faktycznie jest wsparcie dla podstawowych związków i który łączy zrobi prawie to, co chcesz.

Długi i krótki prawdopodobnie chcesz ustawić jako typ danych. Zważywszy, że twoje porównania są prawdopodobnie złożone, potrzebujesz bardziej złożonego zestawu metod.

Moja jedyna uwaga jest taka, że ​​jest to GPL. Jeśli twoje dane są poufne, szanse na to, że nie jesteś zainteresowany tą licencją.

+0

dziękuję, zobaczę to kiedyś, nie jestem pewien, czy to jest to, czego potrzebuję. – David

8

Beyond Compare działa dobrze, jeśli skonfigurowano w nim format pliku JSON, aby użyć Python, aby wydrukować JSON. Przykładowa konfiguracja dla systemu Windows:

  1. Zainstaluj Python 2.7.
  2. W Beyond Compare, przejdź do Tools, under File Formats.
  3. Kliknij przycisk Nowy. Wybierz format tekstu. Wpisz "JSON" jako nazwę.
  4. Na karcie Ogólne:
    • Mask: *.json
  5. Pod zakładką konwersji:
    • konwersji: program zewnętrzny (nazwy plików Unicode)
    • Załadunek: c:\Python27\python.exe -m json.tool %s %t
      • Uwaga, ten drugi parametr w wierszu poleceń musi być %t, jeśli wpiszesz dwa numery %s, utracisz dane.
  6. Kliknij Zapisz.
+1

Musiałem wpisać "c: \ Python27 \ python.exe -m json.tool% s% t" dla ścieżki ładowania (% t zamiast% s dla tej ostatniej zmiennej). –

2

Jeremy Simmons stworzył Format pakietu Better File Posted on forum: "JsonFileFormat.bcpkg" dla BEYOND COMPARE który nie wymaga Pythona czy tak być zainstalowany.

Wystarczy pobrać plik i otworzyć go z BC i jesteś dobry, aby przejść. A więc jest o wiele prostszy.

File Format JSON

Potrzebowałem format pliku dla plików JSON.

Chciałem wydrukować & sortować mój JSON, aby porównanie było łatwe.

Dołączyłem mój pakiet bcpackage z ukończonym formatem plików JSON.

Formatowanie odbywa się poprzez JQ - http://stedolan.github.io/jq/

Rekwizyty do Stephen Dolan dla narzędzia https://github.com/stedolan.

Wysłałem wiadomość do ludzi z Software Scooter prosząc ich o dodanie do strony z dodatkowymi formatami.

Jeśli jesteś zainteresowany obejrzeniem filmu na tym ekranie, jestem pewien, że szybka odpowiedź na wątek z wyższym wynikiem głosowania pomoże im zorientować się, że warto go opublikować. Załączone pliki załączone pliki File Type: bcpkg JsonFileFormat.bcpkg (449,8 KB, 58 wyświetleń)

+0

Hmm ... Zastanawiam się, z którą wersją to działa lub jakie są dokładne kroki instalacji. Na komputerze Mac z BC4. W menu Narzędzia> Ustawienia importu wybierz pobrany plik pkg, a następnie wybierz format plików do zaimportowania, który jest pusty i nie można kontynuować, chyba że zaznaczę pole wyboru "usuń wszystkie istniejące formaty plików", ale nie zaznaczam. Przypuśćmy, że to dobry pomysł, zatrzymałem się tam. – David

+0

@ David - używam tego na BC3 + Windows 8.1 x 64. Problem polega na tym, że używa Windows .exe, więc nie jestem pewien, jak umieścić go na komputerze Mac. Chociaż istnieje również wersja aplikacji OSX. Możesz spróbować wypróbować to w systemie Windows, aby przetestować i/lub skontaktować się z autorem pakietu, jak to zrobić na Mac. Myślę, że to nie powinno być tak skomplikowane, aby zrobić to samo na Macu. Ale ponieważ nie mam takiego, nie mogę tego dla ciebie wymyślić. –

+0

@David - Opublikowalem również rozwiązanie oparte o BC dla SQLite - tutaj: http://sqa.stackexchange.com/a/14283/13028 - Ten pokazuje jak skonfigurować typy plików na BC. Oba są rozszerzeniem plików w pliku BC użytkownika. Jeden jest pakowany, a drugi ma instrukcję "Jak to zrobić". Daj mi znać, jeśli ci to pomoże. Jeśli nie, spróbuję ci w tym pomóc, gdy będę miał więcej czasu. PS: Ponownie, nie mam komputera Mac, więc nie mogłem go przetestować na pewno. –