GSON:使用gson.toJson将Java对象转换为JSON时缺少字段

时间:2011-07-15 08:44:52

标签: java json gson

我正在使用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());
    }
}

有一些documentantion here看起来很接近我需要的东西,但不包括我的情况。

有一种简单的方法来获得我期望的输出吗?我错过了简单的设置或输入参数吗?

2 个答案:

答案 0 :(得分:1)

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

这样的事情是有效的:

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

要实现这一点,您需要一个由String对象组成的对象,以及String对象的列表(可以是向量或数组或List)。

请参阅此question

答案 1 :(得分:1)

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