Метод Jackson ObjectMapper valueToTree также записывает ValueType и integral, но без фактического значения

#java #jackson #fasterxml #javax.json

#java #джексон #fasterxml #javax.json

Вопрос:

Я пытаюсь преобразовать объект JAVA POJO с помощью JSONObject в строку следующим образом:

    class MyPojo {
      public MyPojo(String sName, JsonObject obj) 
      {
         this.sName = sName;
         this.tJsonObj = obj;
      }
      public String sName;
      public javax.json.JsonObject tJsonObj;
   };

    javax.json.JsonObject jsonObj = JsonUtils.toJsonObject("{"key": 123}");
    ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper.ObjectMapper();
    JsonNode node = mapper.valueToTree(new MyPojo("myname", jsonObj));
    String jsonStr = node.toString();
  

Я получаю значение jsonStr как:

 {"sName":"myname","tJsonObj":{"key":{"integral":true,"valueType":"NUMBER"}}}
  

Как я могу получить значение jsonStr как:

 {"sName":"myname","tJsonObj":{"key":123}}
  

JsonUtils.toJsonObject — это мой собственный служебный метод для получения JSONObject из строки.

Комментарии:

1. Их несколько JsonObject , вы не указали, какой именно. Будет лучше использовать fasterxml ObjectNode вместо того, что JsonObject вы используете

2. Это javax.json.JsonObject , я не могу изменить класс POJO.

3. Если вы уверены в своих JsonUtils. Для JSONObject тогда не используйте com.fasterxml.jackson.databind. ObjectMapper

4. извините, я вас не понял. Моя проблема проста — получить строку json из объекта JAVA POJO, который может иметь javax.json. JSONObject как переменная-член. Если не использовать com.fasterxml.jackson.databind. ObjectMapper, тогда что еще. Я не хочу, чтобы моя собственная реализация toString() была в стороне от моего JAVA POJO.