GSON将String []反序列化为一种类型中的String

时间:2014-02-21 12:23:54

标签: java json gson

这似乎是一个奇怪的要求,但我想将JSONStringArray反序列化为String,(而不是String[])。

我的对象示例

class Retailer {
  String name;
  String images;
}

传入JSON:

{
  "name":"Mr Retailer",
  "images":[
    "http://server.com/image1",
    "http://server.com/image2"
  ]
}

因此解析后的对象将包含如下所示的deserilized值:

name = "Mr Retailer"
images = "http://server.com/image1 http://server.com/image2"

分隔符并不重要我将选择一个在我的网址中不存在的分隔符,例如管道白色空间等。

我假设我需要为TypeAdapter编写一个String[]来迭代JSONArray并将数组中的元素连接成一个String?

我也只想为那个特定的类做这个,因为其他类有String[]但是我想让它们独自一人。

2 个答案:

答案 0 :(得分:1)

我认为使用普通函数反序列化会更容易,只剩下

class Retailer {
  String name;
  String[] images;
}

然后定义一个从中生成所需类的类,或者定义一个从该数组返回字符串的函数String getImage()

答案 1 :(得分:0)

基于@Nanne建议的链接,我创建了以下自定义反序列化器。

public class RetailerDeserializer implements JsonDeserializer<Retailer> {

    @Override
    public Retailer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject retailerObject = json.getAsJsonObject();
        final String name = retailerObject.get("name").getAsString();
        JsonArray innerImagesArray = retailerObject.get("innerImages").getAsJsonArray();
        String innerImages = null;
        if (innerImagesArray != null) {
            final String[] innerImagesArr = new String[innerImagesArray.size()];
            for (int i = 0; i < innerImagesArray.size(); i++) {
                innerImagesArr[i] = innerImagesArray.get(i).getAsString();
            }
            innerImages = TextUtils.join(" ", innerImagesArr);
        }
        return new Retailer(name, innerImages);
    }
}

我确信我的“动态”建议会更好。对此我的任何改进都愿意接受为答案。