Как проверить строку JSON в Java? Или я мог бы разобрать его с помощью регулярных выражений?
java
json
validation
sappu
источник
источник
Ответы:
Дикая идея, попробуйте разобрать ее и поймать исключение:
Этот код использует реализацию JSON API org.json, которая доступна на github , в maven и частично на Android .
источник
JACKSON Библиотека
Одним из вариантов будет использование библиотеки Джексона . Сначала импортируйте последнюю версию (сейчас):
Затем вы можете реализовать правильный ответ следующим образом:
Опция Google GSON
Другой вариант - использовать Google Gson . Импортируйте зависимость:
Опять же, вы можете реализовать предложенное решение как:
Здесь следует простой тест:
Пожалуйста, обратите внимание, что может быть «незначительная» проблема из-за запятых, которые будут исправлены в выпуске
3.0.0
.источник
new ObjectMapper().readTree("28xjRBuOQqupRopHeSuhRQ")
Ловушка ДЖЕКСОНА : анализирует без исключений как IntNode (28). Не очень ожидаемый ...С Google Gson вы можете использовать JsonParser:
источник
Вы можете использовать .mayBeJSON (String str), доступный в библиотеке JSONUtils .
источник
Это зависит от того, что вы пытаетесь доказать с помощью своей валидации. Конечно, синтаксический анализ json, как и предполагали другие, лучше, чем использование регулярных выражений, потому что грамматика json более сложна, чем это может быть представлено просто регулярными выражениями.
Если json будет когда-либо анализироваться только вашим java-кодом, используйте тот же парсер для проверки.
Но только разбор не обязательно скажет вам, будет ли он принят в других средах. например
Если ваша проверка должна быть очень тщательной, вы можете:
источник
Пожалуйста, загрузите библиотеку stringtree-json
источник
Немного о разборе:
Json и фактически все языки используют грамматику, которая представляет собой набор правил, которые можно использовать в качестве подстановок. чтобы разобрать json, нужно в основном отработать эти замены в обратном порядке
Json - это не зависящая от контекста грамматика , означающая, что вы можете иметь бесконечно вложенные объекты / массивы, и json все равно будет действительным. регулярное выражение обрабатывает только регулярные грамматики (отсюда и название «reg»), которые являются подмножеством контекстно-свободных грамматик, не допускающих бесконечное вложение, поэтому невозможно использовать только regex для анализа всех допустимых json. Вы можете использовать сложный набор регулярных выражений и циклов, предполагая, что никто не будет прятаться, скажем, на 100 уровнях глубиной, но это все равно будет очень сложно.
если вы готовы написать свой собственный синтаксический анализатор,
вы можете создать синтаксический анализатор с рекурсивным спуском после разработки грамматики
источник
Проверьте, является ли данная строка допустимым JSON в Kotlin . Я конвертировал ответ MByD Java в Котлин
источник
Здесь вы можете найти инструмент, который может проверять файл JSON, или вы можете просто десериализовать ваш файл JSON с любой библиотекой JSON, и если операция прошла успешно, она должна быть действительной (например, google-json, которая выдаст исключение, если ввод это разбор недействительный JSON).
источник
Используя Playframework 2.6, библиотека Json, найденная в Java-API, также может быть использована для простого анализа строки. Строка может быть элементом json массива json. Поскольку возвращаемое значение здесь не имеет значения, мы просто фиксируем ошибку разбора, чтобы определить, является ли строка правильной строкой json или нет.
источник
ИМХО, самый элегантный способ - использовать Java API для JSON Processing (JSON-P), один из стандартов JavaEE, который соответствует JSR 374 .
Используя Maven, добавьте зависимость от JSON-P:
Посетите официальную страницу JSON-P для получения дополнительной информации.
источник
Вот рабочий пример для строгого разбора json с библиотекой gson :
См. Также мой другой подробный ответ в разделе Как проверить, является ли JSON действительным в Java, используя GSON с дополнительной информацией и расширенным контрольным примером с различными недопустимыми примерами.
источник
Как видите, существует множество решений, в основном они анализируют JSON, чтобы проверить его, и в конце вам придется проанализировать его, чтобы быть уверенным.
Но, в зависимости от контекста, вы можете улучшить производительность с предварительной проверкой.
Когда я вызываю API, я просто проверяю, что первый символ - «{», а последний - «}». Если это не так, я не буду создавать парсер.
источник
Я нашел очень простое решение для этого.
Пожалуйста, сначала установите эту библиотеку
net.sf.json-lib
для него.Готово. наслаждаться
источник
Ответы частично верны. Я тоже столкнулся с той же проблемой. Разбор json и проверка на исключение кажется обычным способом, но решение для ввода json не удается, что-то вроде
{"outputValueSchemaFormat": "", "sortByIndexInRecord": 0, "sortOrder": 847874874387209 "по убыванию"} kajhfsadkjh
Как вы можете видеть, JSON является недопустимым, так как есть конечные символы мусора. Но если вы попытаетесь проанализировать вышеупомянутый json с помощью jackson или gson, вы получите проанализированную карту действительных json, а завершающие символы мусора игнорируются. Что не является обязательным решением, когда вы используете парсер для проверки валидности json.
Для решения этой проблемы смотрите здесь .
PS: на этот вопрос я отвечал и отвечал.
источник
а затем вызовите эту функцию, передавая строку JSON :)
источник
Приведенное выше решение охватывает оба сценария:
источник
Решение с использованием
javax.json
библиотеки:источник
Вы можете использовать
WellFormedJson
класс из Валидол библиотеки декларативной проверки.Само объявление может выглядеть следующим образом:
Фаза проверки выглядит так:
Это может показаться излишним для такой простой задачи, но это замечательно, когда вам нужно проверить сложный запрос. Проверьте раздел быстрого начала валидола .
источник