2017-09-05 48 views
3

我正在與一個擁有大量JSON配置文件的項目的大型團隊合作。他們經常變化,當然還有很多合併衝突。我們的開發人員使用一堆不同的GUI合併工具來選擇在合併中使用哪些行。有沒有一種方法來格式化JSON逗號,使合併GUI工具快樂?

很多我們的合併通過「選擇兩條線」來解決(參見下面的示例)。在很多這些合併過程中,似乎GUI合併工具不知道他們需要添加逗號來使結果在語法上正確的JSON。我們的開發人員必須手動添加逗號,而且經常忘記這麼做(再次參見下面的示例)。

A分支

{ 
    "enabled": true, 
    "apiUrl":"https://myapi.com/v1" 
} 

分行A

{ 
    "enabled": true, 
    "clientID": "abc123123" 
} 

合併分公司:

{ 
    "enabled": true, 
    "apiUrl":"https://myapi.com/v1" <=== oops, no comma 
    "clientID": "abc123123" 
} 

有沒有辦法來格式化JSON,以防止這種情況發生?我正在想這種方式(見下面 - 屬性行之間的逗號)可能會解決這個問題,但我不確定。它似乎也浪費了很多空間。

{ 
    "enabled": true 
    , 
    "apiUrl":"https://myapi.com/v1" 
    , 
    "clientID": "abc123123" 
} 

什麼是我選擇這裏,總之告訴我們的工作人員要多一點小心,而解決合併衝突的。

+2

這不是一個解決方案,但正確的'pre-commit'檢查將有助於在某人提交語法錯誤之前標記此問題。 – larsks

+0

任何有關YAML等替代格式是否能解決我的問題的想法?我對JSON的另一大抱怨是缺乏評論的能力。 –

+0

YAML將幫助解決這個問題,因爲沒有逗號需要維護 - 每一行都可以是一個單獨的實體,合併衝突會自動解決(針對您描述的場景) – Lix

回答

4

不幸的是,它似乎是真正的問題在這裏是人爲錯誤:)

要求你的員工在修改代碼時要「多一點謹慎」是一個好主意,但它可能不會阻止這個問題在未來。 我不認爲會有辦法自動「修復」衝突,因爲一旦JSON缺少逗號,它不再是有效的JSON,而且可能是一個正常的非結構化文本文件。考慮可能導致JSON無效的錯誤是實際的錯誤,而不是由於缺少逗號而導致的borked合併。

我可以建議的一件事是實施一個"pre-commit" git hook,試圖JSON.parse(或類似的)文件,如果發生錯誤,您可以阻止提交一個適當的消息。

需要注意的是,您實際上並沒有防止錯誤發生 - 相反您可以在保存有問題的更改之前檢測到它們並通知用戶。

4

對於它的價值,你提出的解決方案類似於Haskell成語起始帶逗號的非起始行。

{ 
    "enabled": true 
    ,"apiUrl":"https://myapi.com/v1" 
    ,"clientID": "abc123123" 
} 

在這種情況下的好處是,它似乎涵蓋的多個開發一般情況下追加新的密鑰,離開第一線不變。

+0

多麼有趣的方法!您可以爲每個創建的JSON創建一個默認的初始行,然後只需**總是**用逗號添加其他條目。 – Lix

+0

SQL Server Management Studio也爲其生成的查詢執行此操作,這使得更容易註釋非最初的行。但是,等等,JSON沒有評論... – CodeCaster

+0

我認爲如果根本原因是人爲錯誤,這種方法會遭受同樣的命運 - 人們忘記用逗號來加上他們的行... – Lix

相關問題