简体   繁体   English

Java将JSON的一部分反序列化为对象,其余部分反序列化为JsonObject

[英]Java deserializing part of the JSON into object and the rest into JsonObject

I was looking everywhere how to deserialize part of the JSON into an object and the rest into JsonObject. 我到处寻找如何将部分JSON反序列化为对象,其余部分反序列化为JsonObject。

for example: 例如:

{
  "id" : "123",
  "message" : {"subject" : "test sub" , "body" : "test body"}
}

I want to deserialize this JSON into this class: 我想将此JSON反序列化为此类:

public class className {
    private String id;
    private transient JsonObject message;

    // getters and setters
}

The problem is that after the deserialization I get empty object {} inside "message". 问题是在反序列化后我在“message”中得到空对象{}

Does anyone have any idea about it? 有没有人对它有任何想法?

====================================================== ================================================== ====

EDIT: 编辑:

A little more info, I am using Spring MVC, the JSON is being sent by POST message into my controller. 更多信息,我使用Spring MVC,JSON正通过POST消息发送到我的控制器。

The controller function looks like this: 控制器功能如下所示:

public @ResponseBody String publish(@RequestBody final className input, final HttpServletRequest request,
        final HttpServletResponse response) {
    //input.message = {}
}

That is because Spring tries to parse your object with Jackson library while your object holds Gson objects (which can't be parsed with Jackson). 这是因为Spring试图用Jackson库解析你的对象,而你的对象持有Gson对象(不能用Jackson解析)。

Please refer Configure Gson in Spring . 请参考Spring中的Configure Gson

@Configuration
@EnableWebMvc
public class Application extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter < ? >> converters) {
        GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter();
        converters.add(gsonHttpMessageConverter);
    }
}

将 json 反序列化为列表<object><div id="text_translate"><p>我有 json:</p><pre> "taxLevels": [{ "code": "VAT", "percentage": 19.0 } ]</pre><p> 这确实是List&lt;TTaxLevel&gt;</p><p> 我有<strong>Model.class</strong> :</p><pre> public class Model{ private final List&lt;TTaxLevel&gt; taxLevels; }</pre><p> 和<strong>TtaxLevel.class</strong> :</p><pre> @NoArgsConstructor public class TTaxLevel { private String code; private Double percentage; }</pre><p> 但我在这里收到错误:</p><blockquote><p> [Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of java.util.LinkedHashMap&lt;java.lang.String,java.lang.String&gt; out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.LinkedHashMap&lt;java.lang.String,java.lang.String&gt; out of START_ARRAY token at [Source: (PushbackInputStream); 行:36,列:19](通过参考链:...Model["taxLevels"])]]</p></blockquote><p> 我可以以某种方式强制jackson在这里ArrayList而不是Map吗? 这是一个问题。</p><p> 这是反序列化代码:</p><pre> Model model = new ObjectMapper().readValue(content, Model.class);</pre></div></object> - Deserializing json as List<Object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在REST客户端中反序列化JsonObject - Deserializing JsonObject in REST client 如何将Json转换为Java对象,反序列化Json - How to convert Json to Java Object, Deserializing Json Java:将JSON结构反序列化为Map <String, Object> - Java: Deserializing JSON structure to Map<String, Object> 将JSON字符串反序列化为自定义Java对象 - Deserializing a JSON String into a custom Java Object 使用Jackson将反序列化的JSON反序列化为Java Object - Deserializing flattened JSON to Java Object using Jackson Java 使用反斜杠反序列化时出现 JSONObject 错误 - Java JSONObject error when deserializing with backslashes 我想用 JSONObject 在 JAVA 中的 Json Object 中添加一个新的 Object - I want to add a new Object inside a Json Object in JAVA with JSONObject 在JAVA中提取JSON对象的一部分 - Extract a part of the JSON object in JAVA 反序列化JSON对象 - Deserializing JSON object 将 json 反序列化为列表<object><div id="text_translate"><p>我有 json:</p><pre> "taxLevels": [{ "code": "VAT", "percentage": 19.0 } ]</pre><p> 这确实是List&lt;TTaxLevel&gt;</p><p> 我有<strong>Model.class</strong> :</p><pre> public class Model{ private final List&lt;TTaxLevel&gt; taxLevels; }</pre><p> 和<strong>TtaxLevel.class</strong> :</p><pre> @NoArgsConstructor public class TTaxLevel { private String code; private Double percentage; }</pre><p> 但我在这里收到错误:</p><blockquote><p> [Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of java.util.LinkedHashMap&lt;java.lang.String,java.lang.String&gt; out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.LinkedHashMap&lt;java.lang.String,java.lang.String&gt; out of START_ARRAY token at [Source: (PushbackInputStream); 行:36,列:19](通过参考链:...Model["taxLevels"])]]</p></blockquote><p> 我可以以某种方式强制jackson在这里ArrayList而不是Map吗? 这是一个问题。</p><p> 这是反序列化代码:</p><pre> Model model = new ObjectMapper().readValue(content, Model.class);</pre></div></object> - Deserializing json as List<Object>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM