2016-07-19 2 views
0

Я использую следующий код для разбора JSONПроверка всей строки в виде JSON с помощью Джексона

new com.fasterxml.jackson.databind.ObjectMapper().readTree(jsonStr) 

Но он разбирает следующую строку успешно, так как он выглядит, как он останавливает обработку, когда он находит правильное дерево, несмотря на то, строка в целом не является допустимым json.

{ 
    "name": "test", 
}, 
    "field": "c" 
} 

Есть ли способ заставить его рассмотреть всю цепочку или поток? Я не смог найти подходящий вариант в DeserializationFeature.

Обратите внимание, что решение не обязательно должно включать jackson. Если есть более простой способ сделать это в java или scala, этого также будет достаточно.

ответ

0

По: http://jsonlint.com/

JSON вы используете не является действительным. Вы можете это исправить, чтобы избавиться от Exception:

{ 
    "name": "test", 
    "field": "c" 
} 
1

С Джексоном вы можете использовать Streaming API, JsonParser, читать JSON, как и проверить, как следующие:

final JsonFactory jsonFactory = new JsonFactory(); 
jsonFactory.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION); 
try (JsonParser parser = jsonFactory.createParser(invalidJson)) { 
    while (!parser.isClosed()) { 
     parser.nextToken(); 
    } 
} 

Например, если есть строка JSON

{ 
    "name": "test" 
}, 
    "field": "c" 
} 

JsonParseException будет сгенерировано следующим образом:

Исключения в потоке "главный" com.fasterxml.jackson.core.JsonParseException: Неожиданный символ ('' (код 44)): ожидаются допустимое значение (число, строка, массив, объекта, «истинное ',' false 'или' null ') в [Источник: { «имя»: «тест» }, «поле»: «c» }; строка: 3, столбец: 3]

jsonFactory.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION) необходимо явно проверить, нет ли повторяющихся имен полей JSON Object. Если включено, синтаксический анализатор проверяет все имена в контексте и выводит дубликаты, бросая JsonParseException

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