这似乎是一个奇怪的要求,但我想将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[]
但是我想让它们独自一人。
答案 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);
}
}
我确信我的“动态”建议会更好。对此我的任何改进都愿意接受为答案。