【问题标题】:Gson object deserialisationGson 对象反序列化
【发布时间】:2013-04-17 12:52:03
【问题描述】:

您能告诉我如何使用 Gson 来提取此字符串中定义的两个不同对象: http://json.parser.online.fr/

我尝试使用

gson.fromJson(json, SeedAttribs.class);

gson.fromJson(json, SettingsAttribs.class);

但两者都不起作用。我很惊讶为什么不。 当特定对象时,我还需要一种方法来替换这个 json 字符串,例如。 SeedAttribs 更改。我需要一种方法来重写它,而 SettingsAttribs 根本不会改变。

如何做到这一点?

感谢您的回答!

【问题讨论】:

  • 你的 SettingsAttribs 类源是什么?
  • 它基本上只是一个模型类,只有很少的字符串字段和它的 get/set 方法......

标签: serialization gson


【解决方案1】:

确保您的原始 JSON 字符串包含正确的格式。最好的方法是使用 GSON 序列化您的对象。代码如下:

public static void main(String[] args)
{
  Gson gson = new Gson();
  SettingsAttribs st = new SettingsAttribs();
  st.setField1("value1");
  st.setField2("value2");
  // report constructed object
  System.out.println("st: " + st);

  // serialize to json
  String json = gson.toJson(st, SettingsAttribs.class);
  System.out.println("json: " + json);

  // deserialize form json
  SettingsAttribs restoredSettings = gson.fromJson(json, SettingsAttribs.class);
  System.out.println("restoredSettings: " + restoredSettings);
}

它编译并运行。它产生的输出:

st: SettingsAttribs [field1=value1, field2=value2]
json: {"field1":"value1","field2":"value2"}
restoredSettings: SettingsAttribs [field1=value1, field2=value2]

和 SettingsAttribs 类:

  public class SettingsAttribs
  {
    private String field1;
    private String field2;

    public String getField1()
    {
      return field1;
    }

    public void setField1(String field1)
    {
      this.field1 = field1;
    }

    public String getField2()
    {
      return field2;
    }

    public void setField2(String field2)
    {
      this.field2 = field2;
    }

    @Override
    public String toString()
    {
      return "SettingsAttribs [field1=" + field1 + ", field2=" + field2 + "]";
    }
  }

【讨论】:

  • 是的,这正是 gson projects google 网站所说的。但是,请更仔细地参考我的帖子!我需要一种方法来序列化更多,例如。 2 个对象(SettingsAttribs.class 和 SeedAttribs.class)并反序列化,然后在更改其中一个对象后,将更改后的对象序列化回 json 字符串,而根本不合并另一个对象!当我读到 gson 时,在我看来它应该像处理一个对象一样工作,但是,我可能在某个地方犯了一个错误
  • 当你序列化改变的对象时,你确定你没有覆盖其他对象实例的 json 字符串吗?显示你的代码你是怎么做的......
  • 好吧,我不是。如果你能更仔细地阅读,请你知道这就是我在这里提出的问题。如果我有 gson.fromJson(json, SettingsAttribs.class);然后我可以从 SettingsAttribs 包含的 json 字符串中提取属性。但是在更改了这个对象之后,我需要一种方法来创建一个由这个新对象和旧字段组成的 json,这些字段还没有从旧的 json 字符串中提取出来。不能让它更清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多