将 Gson 单元素数组序列化为简单的 String

Serializing Gson single element array as a simple String

提问人:Joe 提问时间:8/13/2016 更新时间:8/13/2016 访问量:1003

问:

我需要知道是否有更简单的方法可以使用 Gson 将单个元素 Json 数组序列化为简单字符串。我的要求是这样的:我有一个对象,它是一个字符串数组。如果数组只包含一个元素,当它序列化为 JSON 时,我不希望它表示为数组 - 我希望它表示为字符串。因此,例如,如果此数组包含 2 个元素,则它应该如下所示:

[
  "Something",
  "Nothing"
]

如果数组只包含一个元素,则应按如下方式呈现:

"Something"

下面的代码是一个示例类,演示了我找到的解决方案。如果将所有代码保留为未注释,则将获得一个以 Json 正确呈现的 2 元素数组。如果注释掉以下行,则将得到一个字符串:

testArray.add("Nothing");

我对这个解决方案的问题是它看起来“笨拙”。我必须创建一个单独的“Object”对象才能完成这项工作,这似乎没有必要。我还读到可以使用自定义序列化程序来执行此操作,但对于这么小的事情来说,这似乎也需要很多代码。Gson(或其他库)是否有内置的东西可以做我正在尝试做的事情?

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;

public class DemoClassSerialize {

    public static void main(String[] args) {
        Object testObject = new Object();

        JsonArray testArray = new JsonArray();
        testArray.add("Something");
        //comment out the next line to test the output when there is only one element in this array
        testArray.add("Nothing");

        if (testArray.size()==1) {
            testObject=testArray.get(0);
        } else {
            testObject=testArray;
        }

        Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); 
        String gsonString=gson.toJson(testObject);
        System.out.println(gsonString);
    }

}
Java 数组 json 字符串 gson

评论

2赞 MGorgon 8/13/2016
但是为什么?一个元素数组是完全有效的数组
1赞 ravthiru 8/13/2016
字符串 gsonString=gson.toJson(testArray.size()==1?testArray.get(0):testArray);

答: 暂无答案