2015-12-21 3 views
0

У меня есть файл JSON, который на данный момент проверяется вручную до его ввода в производство. В идеале это автоматизированный процесс, но пока это ограничение.Найти дубликаты ключей JSON в возвышенном тексте 3

Одна вещь, которую я нашел полезной в Eclipse, - это инструменты JSON, которые выделяют дубликаты ключей в файлах JSON. Есть ли аналогичная функциональность в Sublime Text или через плагин?

Следующий JSON, например, может выдать предупреждение о дублирующих ключах.

{ 
    "a": 1, 
    "b": 2, 
    "c": 3, 
    "a": 4, 
    "d": 5 
} 

Спасибо!

ответ

2

Есть plenty проверенных достоверных данных JSON. Я просто попробовал this one, и он сразу же выбрал дубликат. Проблема с использованием JSON линта Sublime основанного как JSONLint является то, что они используют модуль Питона 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.

+1

[с использованием модуля json для Python не предотвращает проверку дубликатов ключей] (http://stackoverflow.com/a/14902564/4473405), поэтому плагины Sublime могут быть обновлены, чтобы выделить их без особых усилий. –

+0

Спасибо за дополнительную информацию. Я продолжаю использовать внешнюю проверку, пока процесс не будет автоматизирован. Спасибо за разъяснение о том, как это работает с python. Возможно, какая-то душа может настроить плагин на основе комментария от Keith Hall, но это не моя игра.Еще раз спасибо! –

1

Даже документация Python говорит, что:

RFC, указывает, что имена в пределах объекта JSON должен быть уникальным, но не предписывает, как повторяющиеся имена объектов JSON должны быть обработаны. По умолчанию этот модуль не вызывает исключения; вместо этого, она игнорирует все, кроме пары Последнее имя-значение для данного имени:

weird_json = «{ "х": 1, "х": 2, "х": 3} ' json.loads (weird_json) {' х ': 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 очень легко формат, не очень подробно, так как все, что может быть болезненным. Обнаружение удвоенных ключей легко, но я уверен, что довольно много работы по созданию плагина.

Смежные вопросы