How to remove special characters from JSON stream, so that I can use gson API to convert JSON objects to JAVA objects?

gson, json

Solution

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

EDIT

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<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));

Problem

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 this? This is the JSON object I get from the request: {"color":"Arctic White","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%"} However, when I try to use Google's gson API to deserialize it to JAVA object- it needs JSON object without any special characters and hence it throws an exception when it encounters '$' and '%'. How can I get rid of these characters without affecting rest of the json object i.e. json result obtained as a string.

Original source