Op *_*kel 13 javascript java serialization json
我想将以下(java)数据结构序列化为JSON:
class Machine {
String name;
Map<PartDescriptor, Part> parts;
}
class PartDescriptor {
String group;
String id;
hashCode()
equals()
}
class Part {
String group;
String id;
String description;
String compat;
...
...
}
Run Code Online (Sandbox Code Playgroud)
什么是JSON代表一个Machine
?
另外(可选),指向JSON到Java序列化器/反序列化器,它将支持您的表示
我会这样做:
{
"name": "machine name",
"parts": [
{ "group": "part group", "id": "part id", "description": "...", ... },
{ "group": "part group", "id": "part id", "description": "...", ... },
// ...
]
}
Run Code Online (Sandbox Code Playgroud)
如果每个Part的"id"是唯一的,则"parts"属性可以是对象而不是数组,每个部分的"id"用作键.
{
"name": "machine name",
"parts": {
"1st part id": { "group": "part group", "description": "...", ... },
"2nd part id": { "group": "part group", "description": "...", ... },
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
您不需要注释或自定义序列化程序.假设你已经有干将在所有领域Part
和Machine
所有真正缺少的IS一个toString()
上PartDescriptor
.如果由于某种原因,您没有getter函数,则需要注释感兴趣的字段,@JsonProperty
以便Jackson知道哪些字段包含在序列化输出中.但是,简单地创建getter更好(也更容易).
在toString()
上PartDescriptor
应返回要在测绘使用的关键.正如另一个答案所示,您可能只是连接相关字段:
@Override
public String toString() {
return group + "|" + id;
}
Run Code Online (Sandbox Code Playgroud)
当你试图Machine
用Jackson的序列化时,你会神奇地得到这个表格ObjectMapper
:
{
"name" : "Toaster",
"parts" : {
"Electrical|Descriptor1" : {
"group" : "Electrical",
"id" : "Part1",
"description" : "Heating Element",
"compat" : "B293"
},
"Exterior|Descriptor2" : {
"group" : "Exterior",
"id" : "Part2",
"description" : "Lever",
"compat" : "18A"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我会这样做。parts
顶级对象的键是具有' s 和'sJSONArray
的a。The将是一个属于您的对象,而 the将是您的。JSONObject
key
value
key
PartDescriptor
value
Part
{
"name":"theName",
"parts":[
{
"key":{
"group":"theGroup",
"id":"theId"
},
"value":{
"group":"theGroup",
"id":"theId",
"description":"theDescription",
"compat":"theCompat",
...
}
},
...
]
}
Run Code Online (Sandbox Code Playgroud)