Существует ли «снисходительный» анализатор 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:
Я обновлю приведенный выше пример, чтобы отразить мои дополнительные "выводы"...
Библиотека комментарий может помочь
@warl0ck, это уродливое регулярное выражение... О_о
@GalAbra, согласно документации, похоже, что он не обрабатывает /* ... */
блочные комментарии, поэтому я не думаю, что это поможет.
@pepoluan Я в курсе, просто предложил на тот случай, если вы захотите написать вместо использования библиотеки. PS: это не моя суть, я знаю это, так как использовал это в прошлом в одном из своих проектов.
@ warl0ck ахаха, я понимаю... просто вид гиперсложного регулярного выражения возвращает воспоминания об отладке регулярных выражений, чего я действительно не жду :sweat_smile: ... но я согласен, это наводит на мысль, что я должен написать свой собственный "препаратор". Спасибо!
По сути, вы хотите разобрать что-то, что не соответствует никаким стандартам и может напоминать или не напоминать какое-то подмножество Javascript… Удачи вам в этом. Это действительно то, что нужно исправить на стороне производителя. Если это не может быть исправлено там, что ж… FML или FYL, я думаю.
@deceze, если бы я имел какое-то влияние на продюсеров, я бы оказал на них свое влияние. К сожалению, я этого не делаю, поэтому мне приходится прибегать к исправлению положения на моей стороне. Не веселое усилие, определенно. *пожимает плечами* пока мне платят... :D
@deceze, однако, это заставляет меня задуматься ... что за богом забытая библиотека .Net осмелится принять это нечестивое искажение JSON в качестве действительного ввода ??
node -e "console.info(JSON.stringify($json));"
…?
Итак, комментарий @warl0ck заставил меня подумать, что мне лучше написать свой собственный «Препроцессор JSON», чтобы выполнить сложную очистку.
Итак, вот он у меня Фрагмент BitBucket в комплекте с простым модульным тестом.
Я протестировал его с моим корпусом искаженных файлов JSON, сгенерированных человеком, и пока он кажется работает хорошо...
Дайте мне знать, если в коде есть ошибка.
Но пока я доволен.
рад, что смог быть полезен
этот суть может помочь, или если вы просто хотите использовать библиотеку, используйте jsonкомментарий