Мягкий парсер JSON для Python

Существует ли «снисходительный» анализатор JSON для Python?

Я продолжаю получать (рукописные) файлы JSON, например:

/* This JSON file is created by someone who does not know JSON
   And not competent enough to search about "JSON Validators" */

{

  /* Hey look!
     A honkin' block comment here!
     Yeehaw */

  "key1": "value1",  // Hey look there's a standard-breaking comment here!
  "key3": .65,       // I'm too lazy to type "0"
  "key4": -.75,      // That "other" .Net program works anyways...
  "key5": [ 1 /* One */, 2 /* Two */, 3 /* Three */, 4 /* Four */],
  "key2": "value2",  // Whoopsie, forgot to delete the comma here...
}

Программа, которая на самом деле использовала эти чудовищно искаженные файлы JSON как-то, не выблевывает эти ошибки. Кстати, эта программа написана на C#.

Я пишу несколько сценариев на Python, которые будут выполнять действия на основе этих файлов JSON, но он продолжает падать (правильно) из-за этих ошибок.

Я могу вручную редактирую эти файлы .json, чтобы они соответствовали стандарту ... но их МНОГО, и поэтому это слишком трудоемко - не говоря уже о том, что мне придется продолжать редактировать новые входящие файлы JSON, ура.

Итак, возвращаясь к моему вопросу, существует ли синтаксический анализатор снисходительный JSON, который может потреблять эти искаженные файлы JSON, не умирая?

Примечание:Этот вопрос касается только завершающей запятой последнего объекта; он НЕ обрабатывает блочные комментарии и/или встроенные комментарии.


Редактировать: Что за... Я только что получил файл JSON, в котором создатель решил удалить ведущие нули для 0 < чисел < 1... -_-

И я обнаружил файл, в который встроен комментарий... :fuming_red:

Я обновлю приведенный выше пример, чтобы отразить мои дополнительные "выводы"...

этот суть может помочь, или если вы просто хотите использовать библиотеку, используйте jsonкомментарий

warl0ck 21.06.2019 08:34

Библиотека комментарий может помочь

GalAbra 21.06.2019 08:41

@warl0ck, это уродливое регулярное выражение... О_о

pepoluan 21.06.2019 11:11

@GalAbra, согласно документации, похоже, что он не обрабатывает /* ... */ блочные комментарии, поэтому я не думаю, что это поможет.

pepoluan 21.06.2019 11:12

@pepoluan Я в курсе, просто предложил на тот случай, если вы захотите написать вместо использования библиотеки. PS: это не моя суть, я знаю это, так как использовал это в прошлом в одном из своих проектов.

warl0ck 21.06.2019 11:25

@ warl0ck ахаха, я понимаю... просто вид гиперсложного регулярного выражения возвращает воспоминания об отладке регулярных выражений, чего я действительно не жду :sweat_smile: ... но я согласен, это наводит на мысль, что я должен написать свой собственный "препаратор". Спасибо!

pepoluan 21.06.2019 11:39

По сути, вы хотите разобрать что-то, что не соответствует никаким стандартам и может напоминать или не напоминать какое-то подмножество Javascript… Удачи вам в этом. Это действительно то, что нужно исправить на стороне производителя. Если это не может быть исправлено там, что ж… FML или FYL, я думаю.

deceze 21.06.2019 11:57

@deceze, если бы я имел какое-то влияние на продюсеров, я бы оказал на них свое влияние. К сожалению, я этого не делаю, поэтому мне приходится прибегать к исправлению положения на моей стороне. Не веселое усилие, определенно. *пожимает плечами* пока мне платят... :D

pepoluan 21.06.2019 12:04

@deceze, однако, это заставляет меня задуматься ... что за богом забытая библиотека .Net осмелится принять это нечестивое искажение JSON в качестве действительного ввода ??

pepoluan 21.06.2019 12:13
node -e "console.info(JSON.stringify($json));"…?
deceze 21.06.2019 12:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
6
10
1 271
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, комментарий @warl0ck заставил меня подумать, что мне лучше написать свой собственный «Препроцессор JSON», чтобы выполнить сложную очистку.

Итак, вот он у меня Фрагмент BitBucket в комплекте с простым модульным тестом.

Я протестировал его с моим корпусом искаженных файлов JSON, сгенерированных человеком, и пока он кажется работает хорошо...

Дайте мне знать, если в коде есть ошибка.

Но пока я доволен.

рад, что смог быть полезен

warl0ck 21.06.2019 12:53

Другие вопросы по теме