Джексон: не удается получить строковое значение из JsonNode

#java #jackson #jackson-databind

Вопрос:

У меня есть корневой код-JsonNode

 JsonNode payloadNode;
 

со следующим значением textValue (log.warn(«PAYLOAD_NODE» payloadNode.textValue());):

  {"id":0,"uid":""}
 

Но когда я пытаюсь получить строковое значение из этого узла:

  JsonNode idNode = payloadNode.get("id");
 

Я получаю ноль

Ответ №1:

Взгляните на это.

Метод, используемый для доступа к строковым значениям. Не выполняет никаких преобразований для узлов с нестроковыми значениями; для нестроковых значений (для которых функция isTextual() возвращает false) будет возвращено значение null. Для строковых значений null никогда не возвращается (но могут быть пустые строки).

Поскольку это текстовое значение, это просто строка, в которой нет поля «идентификатор».

Так что, если у вас есть что-то подобное:

 String s = "{"id":0,"uid":""}";
payloadNode = om.valueToTree(s);
 

вы получили бы такой вывод журнала, если бы ваш JsonNode был просто строкой, как в моем примере. Вам нужно прочитать вашу возможную строку в виде дерева json, так что:

 payloadNode = om.readTree(s);
 

Это даст вам «0» для идентификатора и null для textValue() .