【问题标题】:GSON: Missing fields when converting Java objects to JSON with gson.toJsonGSON:使用 gson.toJson 将 Java 对象转换为 JSON 时缺少字段
【发布时间】:2011-07-15 08:44:52
【问题描述】:

我正在使用GSON 1.7.1 库创建多个Java 对象的JSON 表示。这很好用,但是当类扩展时,例如 Vector,则输出中缺少字段。

实际输出:

[
  "String 1",
  "String 2"
]

要求/预期的输出: 我希望显示新对象字段的内容以及我正在扩展的 Vector 的内容。比如这样的……

{
  "extraInfo": "Extra Info",
  "vector": [
     "String 1",
     "String 2"
  ]
}

我将此添加到现有代码中,因此我无法将类结构从扩展类型 Vector 更改为包含 Vector 类型的字段

这是示例源代码...

import java.util.Vector;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

public class ExtendedStringVector extends Vector<String>{

    private String extraInfo = "";

    public String toString(){
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String jsonOutput = gson.toJson(this);
        return jsonOutput;
    }

    public void setExtraInfo(String test) {
         this.extraInfo = test;
    }

    public String getExtraInfo() {
        return extraInfo;
    }

    public static void main(String[] args) {
        ExtendedStringVector esv = new ExtendedStringVector();
        esv.add("String 1");
        esv.add("String 2");
        esv.setExtraInfo("Extra Info");
        System.out.println(esv.toString());
    }
}

有一些文档here 看起来很接近我的需要,但它不包括我的情况。

有没有一种简单的方法可以获得我期望的输出?我错过了一个简单的设置或类型参数吗?

【问题讨论】:

  • 一定要用Gson吗?或者您可以更改 JSON-to/from-Java 库吗?
  • 不,我不必使用 GSON。 GSON 非常易于使用/设置,除了这个问题中的问题之外,它可以满足我的一切需求。如果其他人知道可以处理这种情况的其他 JSON 与库之间的往来,请告诉我。

标签: java json gson


【解决方案1】:

您需要的输出是无效的 JSON 结构。

这样的事情是有效的:

{
  "extraInfo": "Extra Info",
  "vector" : [
     "String 1",
     "String 2"
  ]
}

为此,您需要一个由 String 对象和 String 对象的列表(可以是向量或数组或列表)组成的对象。

看到这个question

【讨论】:

  • 谢谢。不幸的是,我将此添加到现有代码中,因此我无法选择将类从扩展类型 Vector 更改为包含 Vector 类型的字段。还有其他可以更改的 GSON 选项吗?
【解决方案2】:

我查看了一些 Java-to/from-JSON 库,没有看到任何像您所追求的那样具有内置功能的东西。自定义序列化/反序列化是必要的。

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多