我正在使用gson进行序列化和反序列化。我有以下对象:
OBJECT A:
String myEmail;
int rank;
String msgData;
在上面的例子中,msgData是一个json字符串,所以json格式的上述对象将按两步反序列化。出于特殊原因,我们必须分两步完成。下面的对象B - 将是上面msgData的json。
OBJECT B:
String myName;
int myNumber;
String[] myStrings;
对象B的Json如下:
{
"myName": "TheJumper",
"myNumber": "35",
"myString": [
"abc",
"efg",
"xyz"
]
}
问题:我们如何代表json - OBJECT B;在OBJECT形式的OBJECT形式中,因此当OBJECT A被反序列化时,OBJECT B的json可以被提取为String。
例如:对象A的Json可以表示为(Valid Json):
{
"myEmail": "abc@example.com",
"myRank": "50",
"msgData": "This is a Message"
}
当我尝试以下操作时 - 它会给我一个无效的json错误。
{
"myEmail": "abc@example.com",
"myRank": "50",
"msgData": "{
"myName": "TheJumper",
"myNumber": "35",
"myString": [
"abc",
"efg",
"xyz"
]
}"
}
我尝试过很多东西但是无法解决它。怎么会这样做?
答案 0 :(得分:2)
我们如何代表json - OBJECT B;在OBJECT形式的OBJECT形式中,这样当OBJECT A被反序列化时,OBJECT B的json可以被提取为String。
您需要在OBJECT B JSON字符串中使用\"
转义所有引号;
{
"myEmail": "abc@example.com",
"myRank": "50",
"msgData": "{
\"myName\": \"TheJumper\",
\"myNumber\": \"35\",
\"myString\": [
\"abc\",
\"efg\",
\"xyz\"
]
}"
}
折叠在一行上,看起来像是:
{
"myEmail": "abc@example.com",
"myRank": "50",
"msgData": "{ \"myName\": \"TheJumper\", \"myNumber\": \"35\", \"myString\": [ \"abc\", \"efg\", \"xyz\" ] }"
}
但是,更好的方法是编写有效的JSON,然后将其表示转换为字符串。这样,您无需担心逃避任何事情。例如,您将拥有:
{
"myEmail": "abc@example.com",
"myRank": "50",
"msgData": {
"myName": "TheJumper",
"myNumber": "35",
"myString": [
"abc",
"efg",
"xyz"
]
}
}
然后,当你到达msgData
时,使用GSON将其转换为Gson#toJson()