杰森在杰森内

时间:2015-11-20 14:29:22

标签: json gson

我正在使用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"
      ]
    }"
}

我尝试过很多东西但是无法解决它。怎么会这样做?

1 个答案:

答案 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()

的字符串