我正在尝试使用 Google gson API 将 JSON 对象序列化为 java 对象。
我需要从这个流中删除特殊字符以进行序列化。
我如何实现这一目标?
这是我从请求中得到的 JSON 对象:
{"color":"北极白","imageUrl":"http://www.xyz.com/images/z/1/7/8/8/2/1/1788212-p-DETAILED.jpg", "styleId":"1788212","originalPrice":"$64.95","price":"$64.95","productUrl":"http://www.xyz.com/product/7515478/color/51609","percentOff ":"0%"}
但是,当我尝试使用 Google 的 gson API 将其反序列化为 JAVA 对象时 - 它需要没有任何特殊字符的 JSON 对象,因此在遇到“$”和“%”时会引发异常。如何在不影响 json 对象的其余部分的情况下摆脱这些字符,即作为字符串获得的 json 结果。
最佳答案
它按预期完美运行。无需从 JSON 流中删除这些特殊字符即可将其转换为 Java 对象。
请看下面的示例代码:
BufferedReader reader = new BufferedReader(new FileReader(new File("json.txt")));
MyJSONObject data = new Gson().fromJson(reader, MyJSONObject.class);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));
class MyJSONObject {
private String color;
private String imageUrl;
private String styleId;
private String originalPrice;
private String price;
private String productUrl;
private String percentOff;
// getter & setter
}
输出:(由于 StackOverflow 站点的限制,我已从输出中删除了 URL){
"color": "Arctic White",
"styleId": "1788212",
"originalPrice": "$64.95",
"price": "$64.95",
"percentOff": "0%"
}
你可以试试 JsonDeserializer根据您的需要反序列化它。
我已经在上面发布了示例代码。查找 HERE
编辑
这是使用
JsonDeserializer
的示例代码.示例代码:
BufferedReader reader = new BufferedReader(new FileReader(new File("resources/json29.txt")));
class MyJSONObject {
private String color;
private String imageUrl;
private String styleId;
private double originalPrice;
private double price;
private String productUrl;
private double percentOff;
// getter & setter
}
class MyJSONObjectDeserializer implements JsonDeserializer<MyJSONObject> {
@Override
public MyJSONObject deserialize(final JsonElement json, final Type typeOfT,
final JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
MyJSONObject myJSONObject = new MyJSONObject();
myJSONObject.setColor(jsonObject.get("color").getAsString());
myJSONObject.setImageUrl(jsonObject.get("imageUrl").getAsString());
myJSONObject.setStyleId(jsonObject.get("styleId").getAsString());
myJSONObject.setProductUrl(jsonObject.get("productUrl").getAsString());
try {
String price = jsonObject.get("price").getAsString();
String originalPrice = jsonObject.get("originalPrice").getAsString();
String percentOff = jsonObject.get("percentOff").getAsString();
myJSONObject.setPrice(Double.valueOf(price.substring(1)));
myJSONObject.setOriginalPrice(Double.valueOf(originalPrice.substring(1)));
myJSONObject.setPercentOff(Double.valueOf(percentOff.substring(0,
percentOff.length() - 1)));
} catch (NumberFormatException e) {
e.printStackTrace();
}
return myJSONObject;
}
}
MyJSONObject data = new GsonBuilder()
.registerTypeAdapter(MyJSONObject.class, new MyJSONObjectDeserializer()).create()
.fromJson(reader, MyJSONObject.class);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));
关于json - 如何从 JSON 流中删除特殊字符,以便我可以使用 gson API 将 JSON 对象转换为 JAVA 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23987030/