我有一個JSON文件,目前在投入生產之前由手動驗證。理想情況下,這是一個自動化過程,但現在這是一個約束。在崇高文本中查找重複的JSON密鑰3
我在Eclipse中發現的一件事是JSON工具,它會突出顯示JSON文件中的重複鍵。 Sublime Text或插件中是否有類似的功能?
例如,以下JSON可能會產生有關重複鍵的警告。
{
"a": 1,
"b": 2,
"c": 3,
"a": 4,
"d": 5
}
謝謝!
我有一個JSON文件,目前在投入生產之前由手動驗證。理想情況下,這是一個自動化過程,但現在這是一個約束。在崇高文本中查找重複的JSON密鑰3
我在Eclipse中發現的一件事是JSON工具,它會突出顯示JSON文件中的重複鍵。 Sublime Text或插件中是否有類似的功能?
例如,以下JSON可能會產生有關重複鍵的警告。
{
"a": 1,
"b": 2,
"c": 3,
"a": 4,
"d": 5
}
謝謝!
還有plenty的在線JSON驗證器可用。我剛剛嘗試this one,它立即挑出重複鍵。使用基於崇高JSON的絨狀JSONLint
的問題是,他們使用Python的json
模塊,它不會錯誤的附加鍵:
import json
json_str = """
{
"a": 1,
"b": 2,
"c": 3,
"a": 4,
"d": 5
}"""
py_data = json.loads(json_str) # changes JSON into a Python dict
# which is unordered
print(py_data)
產量
{'c': 3, 'b': 2, 'a': 4, 'd': 5}
顯示,第一a
關鍵被第二個覆蓋。所以,你需要另一個非Python的工具。
即使Python的文件說:
的RFC指定一個JSON對象中的名稱應該是 唯一的,但不要求如何JSON對象重複名應該 處理。默認情況下,該模塊不會引發異常; 相反,它忽略所有但對於一個給定名稱的最後名稱 - 值對:
weird_json =「{ 「×」:1, 「×」:2中, 「x」:3} ' json.loads(weird_json){' X':3}
的object_pairs_hook參數可以被用於改變此行爲。
所以從文檔指出:
class JsonUniqueKeysChecker:
def __init__(self):
self.keys = []
def check(self, pairs):
for key, _value in pairs:
if key in self.keys:
raise ValueError("Non unique Json key: '%s'" % key)
else:
self.keys.append(key)
return pairs
然後: c = JsonUniqueKeysChecker() print(json.loads(json_str, object_pairs_hook=c.check)) # raises
JSON是很容易的格式,不是很詳細所以像,可以是痛苦的。加倍鍵的檢測很容易,但我敢打賭,僞造插件相當多。
[使用Python的json模塊不會阻止檢查重複鍵](http://stackoverflow.com/a/14902564/4473405),因此可以更新Sublime插件以突出顯示它們,而不需要太多努力。 –
感謝有關這方面的更多信息。我將繼續使用外部驗證,直到過程自動化。感謝您對python如何處理這個問題的澄清。也許某種靈魂可以根據Keith Hall的評論調整插件,但那不是我的遊戲。再次感謝! –