繁体   English   中英

反序列化JSON对象

[英]Deserializing JSON object

我在反序列化JSON对象时遇到麻烦。 该对象包含一个要反序列化为Map的集合,这是默认设置。 我需要将它反序列化为Set。 我的代码如下:

TaskDetail.java

@ManyToMany
private Set<RoleDetail> roleDetails = new HashSet<RoleDetail>();

public String toJson() {
    return new JSONSerializer().exclude("*.class").include("roleDetails").serialize(this);
}

RoleDetail.java

@ElementCollection
@Enumerated(EnumType.STRING)
private Set<RoleFunction> roleFunctions = new HashSet<RoleFunction>();

public String toJson() {
    return new JSONSerializer().exclude("*.class").include("roleFunctions").serialize(this);
}

从前端,我提交表单中的数据,该数据由控制器以以下格式接收:

{"name":"Clean Shelves","description":"Clean all shelves in the store","roleDetails":{"description":"A person that counts stock","id":1,"name":"Stock Counter","version":0}}

我需要将roleDetails对象反序列化为HashSet。 如何使用JsonDeserializer做到这一点? 我假设在RoleDetail.java中是这样的:

public static RoleDetail fromJsonToRoleDetail(String json) {
    return new JSONDeserializer<RoleDetail>().use(null, RoleDetail.class).use("roleDetail.values", HashSet.class).deserialize(json);
}

还是我还必须在TaskDetail.java中编写类似的代码?

您的roleDetails应该是对象数组,而不是对象。

你应该有这样的东西:

{"name":"Clean Shelves","description":"Clean all shelves in the store","roleDetails":[{"description":"A person that counts stock","id":1,"name":"Stock Counter","version":0}]}

将 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.

相关问题 将 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> 用杰克逊反序列化嵌套的json对象 将多态 Json object 反序列化为 POJO 使用LocalDateTime字段将JSON反序列化为对象 基于对象类型反序列化JSON 使用列表属性将JSON反序列化为Object 如何将Json转换为Java对象,反序列化Json 使用GSON和RETROFIT反序列化复杂的JSON对象 将JSON字符串反序列化为自定义Java对象 使用Retrofit GsonConverterFactory反序列化为false或对象的json
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM