我有一堂課
public class ClassSerializable {
private Long id;
private String json;
}
哪里欄位json = {"fieldJson": {"one": 1, "two": 1}}
如果用 ObjectMapper 反序列化這個物件
String jsonString = mapper.writeValueAsString(objectСlassSerializable);
結果是這樣的:
{
"id": 7,
"json":"{\"fieldJson\": {\"one\": 1, \"two\": 1}}"
}
已添加轉義(\),并且 json 欄位有引號(“)。如何正確擺脫這種情況并制作單個 JSON?像這樣:
{
"id": 7,
"json": {
"fieldJson": {
"one": 1,
"two": 1
}
}
}
uj5u.com熱心網友回復:
行為是正確的,但與您的意圖不同。
您有一個包含兩個欄位的物件:
- long 型別的 id
- 字串型別的json
但您的意圖是將物件存盤在 json 欄位中。您還需要將它作為物件存盤在 java 中。如果您知道 json 欄位將僅存盤 json 物件,則可以將其定義為 Map<String, Object> ,這是存盤 json 物件的最通用型別。如果它可以是任何型別的 json 有效物體,則應使用 Object,以便它還可以存盤 json 基元(字串、數字)或陣列,而不僅僅是物件。
所以在java中存盤它的最好方法是
public class ClassSerializable {
private Long id;
// It can store any valid json object structure as java object
// Change it to private Object json if it can store also primitives and arrays
private Map<String, Object> json;
}
uj5u.com熱心網友回復:
您的程式現在設定的方式是將json欄位序列化為字串,并且它不知道它應該被序列化為 JSON。因此,您需要將該json欄位序列化為實際的 JSON 物件,將其存盤在 中ClassSerializable,然后將其序列化。
當然,您可能需要包含一些其他代碼以使其正確序列化,但一般的想法是您確實需要指定它是一個物件,而不僅僅是另一個字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496805.html
上一篇:從Java/Kotlin到Flutter的通道名稱是什么(不是繞道)
下一篇:如何防止遞回方法更改變數的值?
