Oracle:
select * from (select foo from bar order by foo) where ROWNUM = x
Я не могу представить json-файл «auto, созданный другой программой» , содержащий комментарии внутри. Поскольку json spec вообще не содержит комментариев, а это по дизайну , поэтому никакая библиотека json не выводит json-файл с комментарием.
Эти комментарии обычно добавляются позже человеком. Никакого исключения в этом случае. OP упомянул, что в своем посте: //"birthday": "nothing" //I comment this line
.
Итак, реальный вопрос должен быть, как правильно комментировать какой-то контент в json-файле, но при этом сохраняя его соответствие спецификации и, следовательно, ее совместимость с другими json libraries?
И ответ: переименуйте свое поле в другое имя. Пример:
{
"foo": "content for foo",
"bar": "content for bar"
}
можно изменить на:
{
"foo": "content for foo",
"this_is_bar_but_been_commented_out": "content for bar"
}
Это будет работать очень хорошо большую часть времени, потому что потребитель, скорее всего, игнорирует неожиданные поля (но не всегда, это зависит от реализации вашего json-файла. Итак, YMMV.)
UPDATE: По-видимому, некоторые читатели были недовольны, потому что этот ответ не дает ожидаемого «решения». Ну, на самом деле, я дал рабочее решение, неявно связавшись с цитатой JSON дизайнера :
Douglas Crockford Public Apr 30, 2012 Комментарии в JSON
Я удалил комментарии от JSON, потому что видел, как люди использовали их для хранения директив синтаксического анализа, что могло бы повредить интероперабельность. Я знаю, что отсутствие комментариев заставляет некоторых людей печально, но это не должно.
Предположим, вы используете JSON для хранения файлов конфигурации, которые вы хотели бы аннотировать. Вперед и вставьте все комментарии, которые вам нравятся. Затем проведите его через JSMin, прежде чем передавать его вашему парсера JSON.
blockquote>Итак, да, используйте JSMin . Просто имейте в виду, что, когда вы направляетесь к «использованию комментариев в JSON», это концептуально неизведанная территория. Нет никакой гарантии, что какие бы инструменты вы ни выбрали: inline
[1,2,3,/* a comment */ 10]
, стиль Python[1, 2, 3] # a comment
(который является комментарием на Python, но не в Javascript), стиль INI[1, 2, 3] ; a comment
, ..., вы получаете идею.Я бы по-прежнему предлагал НЕ добавлять в JSON несовместимые комментарии.
jsoncomment хорош, но встроенный комментарий не поддерживается.
Проверьте jstyleson , которые поддерживают
pip install jstyleson
import jstyleson
result_dict = jstyleson.loads(invalid_json_str) # OK
jstyleson.dumps(result_dict)
Один из способов - преобразовать текст почти JSON в фактический текст JSON, прежде чем передавать его в парсер, например:
input_str = re.sub(r'\\\n', '', input_str)
input_str = re.sub(r'//.*\n', '\n', input_str)
data = json.loads(input_str)
Я лично его не использовал, но пакет python jsoncomment поддерживает разбор файла JSON с комментариями.
Вы используете его вместо парсера JSON следующим образом:
parser = JsonComment(json)
parsed_object = parser.loads(jsonString)
[1,2,3,/* a comment */ 10]
.
– Sergei
26 May 2017 в 12:24
Как насчет commentjson?
http://commentjson.readthedocs.io/en/latest/
Это может разобрать что-то вроде ниже.
{
"name": "Vaidik Kapoor", # Person's name
"location": "Delhi, India", // Person's location
# Section contains info about
// person's appearance
"appearance": {
"hair_color": "black",
"eyes_color": "black",
"height": "6"
}
}
Вероятно, elasticsearch, REST API некоторых продуктов не принимает поле комментариев. Поэтому я думаю, что комментарий внутри json необходим клиенту.
EDITED
jsmin кажется более распространенным.
tsc --init
(машинопись) генерируетtsconfig.json
с комментариями, которые я считаю. – John 7 May 2017 в 17:27needs to pipe the file through JSMin before parsing it
. (Цитируется из здесь ). – RayLuo 8 May 2017 в 06:45/* */
и//
. – Lithy 22 May 2017 в 22:58/* */
и//
AT ONE POINT, но похоже, что это считается ошибкой, а они изменили это поведение окончательно . В более общем плане могут быть некоторые программы, которые генерируют нестандартный json-выход, но затем требуется дополнительный пост-процесс для преобразования вывода в действительный json (или в этом случае им необходимо исправить программу позже). Эти программы НЕ квалифицируются как свидетельство для поддержки «json может содержать комментарии». Теперь, могу ли я получить ваш ответ на мой ответ? ;-) – RayLuo 23 May 2017 в 19:24{"": "Some comment"}
– Lithy 27 May 2017 в 12:55