I am trying to use Google gson API to serialize JSON objects to java objects. I need to remove special characters from this stream for the serialization. How do I achieve t
It works perfectly as expected. There is no need to remove these special characters from JSON stream to convert it into Java object.
Please have a look at below sample code:
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
}
output: (I have deleted URLs from the output due to constrain of StackOverflow site)
{
"color": "Arctic White",
"styleId": "1788212",
"originalPrice": "$64.95",
"price": "$64.95",
"percentOff": "0%"
}
You can try with JsonDeserializer to deserializer it as per your need.
I have already posted a sample code on it. Find it HERE
Here is the sample code using JsonDeserializer
.
Sample code :
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 {
@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));