package edu.stanford.nlp.sempre;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.ObjectWriter;
import java.io.*;
import java.util.Map;
/**
* Simple wrappers and sane defaults for Jackson.
*
* @author Roy Frostig
*/
public final class Json {
private Json() { }
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
static {
OBJECT_MAPPER.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
}
public static ObjectMapper getMapper() {
return OBJECT_MAPPER;
}
private static ObjectWriter getWriter(Class<?> view) {
if (view != null)
return getMapper().writerWithView(view);
else
return getMapper().writer();
}
private static ObjectReader getReader(Class<?> view) {
if (view != null)
return getMapper().readerWithView(view);
else
return getMapper().reader();
}
// TODO (rf):
// - readValueHard from InputStream, Reader, JsonParser, and File
// (all forwards)
public static <T> T readValueHard(String json, Class<T> klass) {
return readValueHard(json, klass, Object.class);
}
public static <T> T readValueHard(String json, Class<T> klass, Class<?> view) {
try {
return getReader(view).withType(klass).readValue(json);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static <T> T readValueHard(String json, TypeReference<T> typeRef) {
return readValueHard(json, typeRef, Object.class);
}
public static <T> T readValueHard(String json, TypeReference<T> typeRef, Class<?> view) {
try {
return getReader(view).withType(typeRef).readValue(json);
} catch (JsonMappingException e) {
throw new RuntimeException(e);
} catch (JsonParseException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static <T> T readValueHard(Reader r, Class<T> klass) {
return readValueHard(r, klass, Object.class);
}
public static <T> T readValueHard(Reader r, Class<T> klass, Class<?> view) {
try {
return getReader(view).withType(klass).readValue(r);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static <T> T readValueHard(Reader r, TypeReference<T> typeRef) {
return readValueHard(r, typeRef, Object.class);
}
public static <T> T readValueHard(Reader r, TypeReference<T> typeRef, Class<?> view) {
try {
return getReader(view).withType(typeRef).readValue(r);
} catch (JsonMappingException e) {
throw new RuntimeException(e);
} catch (JsonParseException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static Map<String, Object> readMapHard(String json) {
return readMapHard(json, Object.class);
}
public static Map<String, Object> readMapHard(String json, Class<?> view) {
try {
return getReader(view).withType(Map.class).readValue(json);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static String prettyWriteValueAsStringHard(Object o) {
try {
return getMapper().writerWithDefaultPrettyPrinter().writeValueAsString(o);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public static String writeValueAsStringHard(Object o) {
return writeValueAsStringHard(o, Object.class);
}
public static String writeValueAsStringHard(Object o, Class<?> view) {
try {
return getWriter(view).writeValueAsString(o);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public static byte[] writeValueAsBytesHard(Object o) {
return writeValueAsBytesHard(o, Object.class);
}
public static byte[] writeValueAsBytesHard(Object o, Class<?> view) {
try {
return getWriter(view).writeValueAsBytes(o);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public static void prettyWriteValueHard(File f, Object o) {
try {
getMapper().writerWithDefaultPrettyPrinter().writeValue(f, o);
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void writeValueHard(File f, Object o) {
writeValueHard(f, o, Object.class);
}
public static void writeValueHard(File f, Object o, Class<?> view) {
try {
getWriter(view).writeValue(f, o);
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void writeValueHard(OutputStream out, Object o) {
writeValueHard(out, o, Object.class);
}
public static void writeValueHard(OutputStream out, Object o, Class<?> view) {
try {
getWriter(view).writeValue(out, o);
} catch (JsonMappingException e) {
throw new RuntimeException(e);
} catch (JsonGenerationException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void writeValueHard(JsonGenerator jg, Object o) {
writeValueHard(jg, o, Object.class);
}
public static void writeValueHard(JsonGenerator jg, Object o, Class<?> view) {
try {
getWriter(view).writeValue(jg, o);
} catch (JsonMappingException e) {
throw new RuntimeException(e);
} catch (JsonGenerationException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void writeValueHard(Writer w, Object o) {
writeValueHard(w, o, Object.class);
}
public static void writeValueHard(Writer w, Object o, Class<?> view) {
try {
getWriter(view).writeValue(w, o);
} catch (JsonMappingException e) {
throw new RuntimeException(e);
} catch (JsonGenerationException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}