【问题标题】:How to map two different variables value in a JSON string to a single class variable?如何将 JSON 字符串中的两个不同变量值映射到单个类变量?
【发布时间】:2014-01-24 04:03:26
【问题描述】:

我有一个这样的 JSON 字符串 -

String jsonString1 = "{\"warning\": \"user_id not found\", \"user_id\": some_user_id}";

or

String jsonString2 = "{\"error\": \"user_id for wrong partition\", \"user_id\": some_user_id, \"partition\": some_partition}";

我正在尝试将上面的 JSON 字符串与下面的类进行映射。我在这里使用 GSON -

public class ErrorResponseTest {

    private String error;
    private String user_id;
    private String partition;
    private String client_id;

    // getters or setters
}

问题陈述:

我想将上述 JSON 字符串中的 warningerror 映射到上述类中的 error 变量。但目前它仅将jsonString2 映射到错误变量..

使用下面的代码,我可以反序列化jsonString2,然后在错误变量中显示user_id for wrong partition。但是如果我尝试反序列化jsonString1,那么它会在错误变量中显示空值..

ErrorResponseTest hello = new Gson().fromJson(jsonString2, ErrorResponseTest.class);

是否可以将warning 映射到我上面的类中的错误变量?这意味着如果我使用上述类反序列化jsonString1,我希望在错误变量中有user_id not found..

可以吗?

【问题讨论】:

  • 不要过于复杂。创建两个类,一个映射jsonString1,另一个映射jsonString2。吻。如果您是 DRYer,请创建一个包含公共属性的超类。

标签: java json deserialization gson


【解决方案1】:

您可以考虑 3 种方法:

  • 查看自定义命名策略http://bethecoder.com/applications/tutorials/json/google-gson/custom-field-names-strategy.html 并疯狂地将两个序列化名称映射到一个类名称。
  • 创建两个不同的类,一个用于警告,另一个用于错误,以及一个包含所有公共字段的公共父类
  • 更改您的课程并添加“errorLevel”字段。在 thr json 中,将“错误”和“警告”更改为“消息”之类的内容,并添加“错误级别”字段。

我更喜欢第三种方法,所以你只有一个类,而且 json 错误消息模型更独立,更易读,比如说一些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2018-03-03
    相关资源
    最近更新 更多