2012-10-09 44 views
8

我有一個問題我想解決,不必花費大量的手動工作來分析作爲替代。大型JSON數據的JSON差異,發現一些JSON作爲另一個JSON的子集

我有2個JSON對象(從不同的Web服務API或HTTP響應返回)。這兩個JSON對象之間有相交的數據,它們共享相似的JSON結構,但不完全相同。一個JSON(較小的一個)就像更大的JSON對象的一個​​子集。

我想查找兩個對象之間的所有相位數據。實際上,我對對象內的共享參數/屬性更感興趣,而不是每個對象的參數/屬性的實際值。因爲我想最終使用來自一個JSON輸出的數據來構造另一個JSON作爲API調用的輸入。不幸的是,我沒有爲每個API定義JSON的文檔。 :(

什麼讓這個更加困難的是JSON對象是巨大的,如果你通過Windows記事本打印出一個頁面跨越一頁,其他跨越37頁APIs返回壓縮爲一行的JSON輸出。比較沒有太大的作用,我不得不手動重新格式化或w /腳本來打破對象瓦特/換行等文本比較工作良好。試用超越比較工具。

我可以做手動search/grep,但是通過循環遍歷JSON中的所有參數是一種痛苦,可以編寫代碼來做到這一點,但我也必須花時間做這件事,並測試代碼是否也可以工作。已經爲此製作了代碼...

或者可以查找JSON diff類型的工具。搜索了一些。碰到這些:

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

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

都沒有做到我想要的東西。據推測,JSON要麼太複雜,要麼太大而無法處理。

有關最佳解決方案的任何想法?或者可能現在最好的解決方案是對每個參數/屬性進行手動分析w/grep?

就代碼解決方案而言,任何語言都可以。我只需要一個解析器或diff工具來完成我想要的工作。

對不起,無法與您共享JSON數據結構,它可能被認爲是保密的。

+0

你知道,你可以輕鬆地漂亮地打印用換行和縮進的JSON數據? –

+0

FWIW:顯示JSON文本的頁面遠非「巨大」;我不會認爲它是「大」,而只是「不小」。 –

+0

@ user1689607,你如何漂亮地打印JSON數據?我不是ajax/jquery/js web開發人員,還沒有完成web dev w/latest技術,只是在年前沒有使用ajax的東西。我現在只是測試應用程序。 – David

回答

1

我有一個小的GPL項目,可以爲簡單的 JSON做訣竅。我沒有添加對嵌套實體的支持,因爲它更像是一個簡單的ObjectDB解決方案,實際上並不是JSON(儘管事實上它很明顯受到它的啓發。)

API的長和短很簡單。創建一個新的組,填充它,然後通過任何你需要的邏輯參數,將一個子集

https://github.com/danielbchapman/groups

的API使用基本上是這樣 - >

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

這事實上是對基本的工會支持,並加入其中會做幾乎你想要的。

多空你可能想要一個Set作爲你的數據類型。考慮到你的比較可能很複雜,你需要一套更復雜的方法。

我唯一要注意的是它是GPL。如果您的數據是保密的,您可能不會對該許可證感興趣。

+0

謝謝,我會在某個時候看看,不知道是否我需要它。 – David

8

Beyond Compare效果很好,如果您在其中設置JSON文件格式以便使用Python來漂亮地打印JSON。適用於Windows的示例設置:

  1. 安裝Python 2.7。
  2. 在Beyond Compare中,在文件格式下的工具下。
  3. 單擊新建。選擇文本格式。輸入「JSON」作爲名稱。
  4. 在常規選項卡:
    • 面膜:*.json
  5. 下轉換標籤:
    • 轉換:外部程序(Unicode文件名)
    • 裝載:c:\Python27\python.exe -m json.tool %s %t
      • 請注意,第二個參數在命令行中必須爲%t,如果輸入兩個%s,您將遭受數據丟失。
  6. 單擊保存。
+1

我必須爲加載路徑輸入「c:\ Python27 \ python.exe -m json.tool%s%t」(對於後一個變量,%t代替%s)。 –

2

Jeremy Simmons爲BEYOND COMPARE創建了一個更好的文件格式包 Posted on forum: "JsonFileFormat.bcpkg",它不需要安裝python左右。

只需下載文件並用BC打開它,你就可以走了。所以,它更簡單。

JSON文件格式

我需要的JSON文件的文件格式。

我想漂亮打印&對我的JSON進行排序以便比較容易。

我已經用我完整的JSON文件格式附加了我的bcpackage。

格式化通過JQ實現 - http://stedolan.github.io/jq/

道具 斯蒂芬·杜蘭爲公用事業https://github.com/stedolan

我發送了一條消息給Scooter Software的人,要求他們將 包含在頁面中,並附加格式。

如果你有興趣在那裏看到它,我敢肯定快速回復 帶有加票的線程將幫助他們看到發佈它的值。 附加文件附件文件類型:bcpkg JsonFileFormat.bcpkg (449.8 KB,58次)

+0

嗯......我想知道這個版本的工作原理或安裝步驟。在與BC4的Mac上。在工具>導入設置,選擇下載的pkg文件,然後下一個屏幕是選擇文件格式導入&它是空白的,不能繼續,除非我選中複選框「刪除所有現有的文件格式」,但我不'假設這是個好主意,我就在那裏停了下來。 – David

+0

@David - 我在BC3 + Windows 8.1 x 64上使用它。問題是它使用Windows .exe,所以我不知道如何將它放在Mac上。儘管該應用程序的OSX版本也存在。您可能希望在Windows上嘗試此操作,以便對Mac進行測試和/或聯繫軟件包作者。我的想法是,在Mac上做同樣的事情不應該那麼複雜 - 但是,因爲我沒有一個我不能爲你解決這個問題。 –

+0

@David - 我爲SQLite發佈了一個基於BC的解決方案 - 這裏:http://sqa.stackexchange.com/a/14283/13028 - 這個展示瞭如何在BC上配置文件類型。這兩個都是用戶爲BC提供的文件擴展名。一個是預先打包的,另一個是如何。讓我知道這是否適合你。如果沒有,當我有更多時間時,我會盡力爲你提供幫助。PS:同樣,我沒有Mac,所以我無法測試它。 –