All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cedarsolutions.util.JsonUtils Maven / Gradle / Ivy

There is a newer version: 5.8.4
Show newest version
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 *              C E D A R
 *          S O L U T I O N S       "Software done right."
 *           S O F T W A R E
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * Copyright (c) 2013 Kenneth J. Pronovici.
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the Apache License, Version 2.0.
 * See LICENSE for more information about the licensing terms.
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * Author   : Kenneth J. Pronovici 
 * Language : Java 6
 * Project  : Common Java Functionality
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package com.cedarsolutions.util;

import java.lang.reflect.Type;
import java.util.Date;

import com.cedarsolutions.exception.CedarRuntimeException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;


/**
 * Utilities related to the JSON serialization format using the GSON library.
 *
 * 

* Note that this implementation has problems deserializing generic collections. * You have to jump through some hoops to make it work, and I've never had the * patience to figure out how. For back-end work (i.e. the GAE data store), you're * probably better off using a JAXB binding rather than JSON. *

* * @see GSON User Guide * @see Stack Overflow * @author Kenneth J. Pronovici */ public class JsonUtils { /** * Get the JSON representation for an object. * @param obj Object to serialize * @return Serialized representation of the object. */ public static String getJsonString(Object obj) { return getGson().toJson(obj); } /** * Parse a JSON representation, returning an instance of a class. * @param jsonString JSON string to parse * @param clazz Class that the string is expected to serialize * @return Instance of the class deserialized from the JSON string. */ public static T parseJsonString(String jsonString, Class clazz) { return getGson().fromJson(jsonString, clazz); } /** * Parse a JSON representation, returning an instance of a class. * @param jsonString JSON string to parse * @param className Name of the class that the string is expected to serialize * @return Instance of the class deserialized from the JSON string. */ public static Object parseJsonString(String jsonString, String className) { try { return getGson().fromJson(jsonString, Class.forName(className)); } catch (ClassNotFoundException e) { throw new CedarRuntimeException("Could not find class: " + className); } } /** Get a properly configured Gson object for use in other methods. */ private static Gson getGson() { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Date.class, new GsonDateSerializer()); return gsonBuilder.create(); } /** JSON date serializer. */ private static class GsonDateSerializer implements JsonSerializer, JsonDeserializer { private String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS Z"; @Override public JsonElement serialize(Date date, Type typeOfT, JsonSerializationContext context) { return new JsonPrimitive(DateUtils.formatDate(date, DATE_FORMAT)); } @Override public synchronized Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return DateUtils.parseDate(json.getAsString(), DATE_FORMAT); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy