JSON-lib первоначально анализирует и заполняет карту Java входным JSON. К сожалению, JSON-lib затем проверяет, является ли каждое имя элемента объекта JSON JSON null
. Проверка null
выполняется методом JSONNull.equals(Object)
. Этот метод возвращает true для «пустой» строки JSON, которая, конечно, на самом деле не является значением JSON null
.
Я рекомендую сообщить об ошибке в проекте JSON-lib для этой проблемы. Реализация JSONNull.equals(Object)
имеет недостатки.
К сожалению, невозможно обработать это с помощью пользовательского PropertyNameProcessor
.
Опции, доступные для более быстрого решения, включают самостоятельное изменение кода JSON-lib или переключение библиотек.
Если вы можете переключать библиотеки, я настоятельно рекомендую Джексон . Ниже приведен пример его использования для десериализации примера JSON из исходного вопроса.
/*
{
"properties" : {
"null" : {
"value" : false
}
}
}
*/
String json = "{\"properties\":{\"null\":{\"value\":false}}}";
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(json, Map.class);
System.out.println(map);
// output: {properties={null={value=false}}}
Map<String, Object> propertiesMap = (Map) map.get("properties");
System.out.println(propertiesMap);
// output: {null={value=false}}
Map<String, Object> nullMap = (Map) propertiesMap.get("null");
System.out.println(nullMap);
// output: {value=false}