【问题标题】:Dynamically set JSON key in GSON在 GSON 中动态设置 JSON 密钥
【发布时间】:2015-07-06 21:32:42
【问题描述】:

我正在编写一个Android 应用程序,它通过 JSON 发送一些数据。我正在使用GSON 来序列化/反序列化我的对象。我已经使用了一些对象,但是一个端点/对象给我带来了麻烦。

应用程序的功能基本上是多项选择题。用户可以为大约 10 个问题选择 A、B、C 或 D 之一,并且根据选择,还有一个与此选择相关联的 long 值。

这是我尝试发布的 JSON 示例:

{
    "user": "abcd1234",
    "pass": "abc123",
    "itemID": 1234,
    "listSelection": [
        ("A", 21),
        ("D", 18),
        ("B", 34),
        ...
    ]
}

所以问题出在listSelection 对象上。我不控制 API。业主将上述样品寄给我使用。我宁愿以answer: A, value: 21 的形式拥有它,但所有者想要元组。

我正在尝试在 Java 中创建类以使 GSON 创建上述内容以通过 POST 发送到 API,但我对这个过程的理解是 GSON 根据变量名称命名密钥。这对于userpassitemID 来说很好,但对于listSelection 中密钥是动态的项目,这不起作用。我不确定是否需要将其放入地图中,或者 GSON 中是否有其他方法可以动态设置密钥。

我在想这样的事情:

public class AnswerSet {

    private String user;
    private String pass;
    private int itemID;
    private List<Answer> listSelection;
}

Answer 类可能在哪里:

public class Answer {

    private String answer;
    private long answerValue;
}

但这会错误地格式化JSON

有人可以帮忙吗? 谢谢。

【问题讨论】:

  • 为什么你建议的最后一件事格式不正确?
  • 它将以"answer": "A", "answerValue": 21而不是"A" : 21的形式形成
  • 我想你需要为 Answer 实现自定义序列化程序,看看stackoverflow.com/questions/6856937/…
  • 这些对必须以相同的名称引用。我认为不可能有你所说的。之后怎么反序列化?
  • 你确定你的答案被()包围而不是{}吗?

标签: java gson


【解决方案1】:

这不是有效的 JSON(尝试通过 validator 运行它),所以我不希望 GSON 能够解析它。您必须实现自己的解析器或将 POST 更改为有效的 JSON。

【讨论】:

  • 好的,谢谢,我设法将 JSON 更改为有效格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2020-07-14
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多