Json-lib.jarバッグJsonの実例プログラムに基づいて
20119 ワード
元のチェーン:http://www.cnblogs.com/langtianya/archive/2013/04/09/3009235.html
本文はspringsideの例に基づいて、Jacksonの基本的な使い方と大量の特殊なFeatureを示します。全部で13種類の使用方法です。
json-lib.jar Json
1.JSONObject to DynaBean
String json = "{name=\"json\",bool:true,int:1,double:2.2}";
JSONObject jsonObject = JSONObject.fromObject(json);
// :DynaBean bean = (DynaBean) JSONSerializer.toJava( jsonObject );
Object bean = JSONObject.toBean(jsonObject);
//Object bean1 = JSONSerializer.toJava(jsonObject);
assertEquals(jsonObject.get("name"), PropertyUtils.getProperty(bean, "name"));
assertEquals(jsonObject.get("bool"), PropertyUtils.getProperty(bean, "bool"));
assertEquals(jsonObject.get("int"), PropertyUtils.getProperty(bean, "int"));
assertEquals(jsonObject.get("double"), PropertyUtils.getProperty(bean, "double"));
2.JSONObject to JavaBean
String json = "{name:\"zhangsan\",age:25,hight:1.72,sex:true}";
JSONObject jsonObject = JSONObject.fromObject(json);
UserBean bean = (UserBean) JSONObject.toBean(jsonObject, UserBean.class);
System.out.println(jsonObject);
, , , Caused by: java.lang.NoSuchMethodException: com.json.Json$UserBean.<init>()
3.JSONArray to List
String json = "[\"first\",\"second\"]";
JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON(json);
List output = (List) JSONSerializer.toJava(jsonArray);
4.JSONArray to array
String json = "[\"first\",\"second\"]";
JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON(json);
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY);
Object[] output = (Object[]) JSONSerializer.toJava(jsonArray, jsonConfig);
Object[] expected = new Object[] { "first", "second" };
ArrayAssertions.assertEquals(expected, output);
5.JSON JavaBean( demo jar )
String str="[{\"id\":\"328\",\"mestype\":\"inbox\"},{\"id\":\"327\",\"mestype\":\"inbox\"},{\"id\":\"279\",\"mestype\":\"already\"},{\"id\":\"278\",\"mestype\":\"already\"},{\"id\":\"277\",\"mestype\":\"already\"},{\"id\":\"310\",\"mestype\":\"inbox\"},{\"id\":\"308\",\"mestype\":\"inbox\"},{\"id\":\"305\",\"mestype\":\"inbox\"},{\"id\":\"304\",\"mestype\":\"inbox\"},{\"id\":\"303\",\"mestype\":\"inbox\"}]";
JSONArray jsonArray=(JSONArray) JSONSerializer.toJSON(str);
List list=(List)JSONSerializer.toJava(jsonArray);
for (Object obj: list) {
JSONObject jsonObject = JSONObject.fromObject(obj);
MessageBean bean = (MessageBean) JSONObject.toBean(jsonObject, MessageBean.class);
String id=bean.getId()+"";
String type=bean.getMestype();
System.out.println(id+" "+type);
}
System.out.println(list.size());
http://blog.sina.com.cn/s/blog_9 d 0 ce63 d 0102 vmd. Jackson Demo及び使用方法本文はspringsideの例に基づいて、Jacksonの基本的な使い方と大量の特殊なFeatureを示します。全部で13種類の使用方法です。
public class JsonDemo {
private static JsonMapper mapper = JsonMapper.buildNonDefaultMapper();
1、 / Json .
@Test
public void toJson() throws Exception {
//Bean
TestBean bean = new TestBean("A");
String beanString = mapper.toJson(bean);
System.out.println("Bean:" + beanString);
assertEquals("{"name":"A"}", beanString);
//Map
Map<String, Object> map = Maps.newLinkedHashMap();
map.put("name", "A");
map.put("age", 2);
String mapString = mapper.toJson(map);
System.out.println("Map:" + mapString);
assertEquals("{"name":"A","age":2}", mapString);
//List<String>
List<String> stringList = Lists.newArrayList("A", "B", "C");
String listString = mapper.toJson(stringList);
System.out.println("String List:" + listString);
assertEquals("["A","B","C"]", listString);
//List<Bean>
List<TestBean> beanList = Lists.newArrayList(new TestBean("A"), new TestBean("B"));
String beanListString = mapper.toJson(beanList);
System.out.println("Bean List:" + beanListString);
assertEquals("[{"name":"A"},{"name":"B"}]", beanListString);
//Bean[]
TestBean[] beanArray = new TestBean[] { new TestBean("A"), new TestBean("B") };
String beanArrayString = mapper.toJson(beanArray);
System.out.println("Array List:" + beanArrayString);
assertEquals("[{"name":"A"},{"name":"B"}]", beanArrayString);
}
2、 Json / .
@Test
public void fromJson() throws Exception {
//Bean
String beanString = "{"name":"A"}";
TestBean bean = mapper.fromJson(beanString, TestBean.class);
System.out.println("Bean:" + bean);
//Map
String mapString = "{"name":"A","age":2}";
Map<String, Object> map = mapper.fromJson(mapString, HashMap.class);
System.out.println("Map:");
for (Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
//List<String>
String listString = "["A","B","C"]";
List<String> stringList = mapper.fromJson(listString, List.class);
System.out.println("String List:");
for (String element : stringList) {
System.out.println(element);
}
//List<Bean>
String beanListString = "[{"name":"A"},{"name":"B"}]";
JavaType beanListType = mapper.constructParametricType(List.class, TestBean.class);
List<TestBean> beanList = mapper.fromJson(beanListString, beanListType);
System.out.println("Bean List:");
for (TestBean element : beanList) {
System.out.println(element);
}
}
3、 Binder.
@Test
public void threeTypeBinders() {
TestBean bean = new TestBean("A");
//
JsonMapper normalMapper = JsonMapper.buildNormalMapper();
assertEquals("{"nullValue":null,"name":"A","defaultValue":"hello"}", normalMapper.toJson(bean));
// nullValue
JsonMapper nonNullMapper = JsonMapper.buildNonNullMapper();
assertEquals("{"name":"A","defaultValue":"hello"}", nonNullMapper.toJson(bean));
// nullValue defaultValue
JsonMapper nonDefaultMaper = JsonMapper.buildNonDefaultMapper();
assertEquals("{"name":"A"}", nonDefaultMaper.toJson(bean));
}
4、 , ,Empty ,"null" .
@Test
public void nullAndEmpty() {
// toJson //
//Null Bean
TestBean nullBean = null;
String nullBeanString = mapper.toJson(nullBean);
assertEquals("null", nullBeanString);
//Empty List
List<String> emptyList = Lists.newArrayList();
String emptyListString = mapper.toJson(emptyList);
assertEquals("[]", emptyListString);
// fromJson //
//Null String for Bean
TestBean nullBeanResult = mapper.fromJson(null, TestBean.class);
assertNull(nullBeanResult);
nullBeanResult = mapper.fromJson("null", TestBean.class);
assertNull(nullBeanResult);
//Null/Empty String for List
List nullListResult = mapper.fromJson(null, List.class);
assertNull(nullListResult);
nullListResult = mapper.fromJson("null", List.class);
assertNull(nullListResult);
nullListResult = mapper.fromJson("[]", List.class);
assertEquals(0, nullListResult.size());
}
5、 , int Name , .
@Test
public void enumData() {
// enum.name()
assertEquals(""One"", mapper.toJson(TestEnum.One));
assertEquals(TestEnum.One, mapper.fromJson(""One"", TestEnum.class));
// enum.toString()
// ,index toString int, .
// .
JsonMapper newMapper = JsonMapper.buildNormalMapper();
newMapper.setEnumUseToString(true);
assertEquals(""1"", newMapper.toJson(TestEnum.One));
assertEquals(TestEnum.One, newMapper.fromJson(""1"", TestEnum.class));
}
Bean.
public static enum TestEnum {
One(1), Two(2), Three(3);
private int index;
TestEnum(int index) {
this.index = index;
}
@Override
public String toString() {
return new Integer(index).toString();
}
}
6、 .
@Test
public void dateData() {
DateTime jodaDate = new DateTime();
// Timestamp
Date date = new Date(jodaDate.getMillis());
String tsString = String.valueOf(jodaDate.getMillis());
assertEquals(tsString, mapper.toJson(date));
assertEquals(date, mapper.fromJson(tsString, Date.class));
}
7、 JSON Bean , Bean, .
@Test
public void updateBean() {
String jsonString = "{"name":"A"}";
TestBean bean = new TestBean();
bean.setDefaultValue("Foobar");
bean = mapper.update(bean, jsonString);
assertEquals("A", bean.getName());
assertEquals("Foobar", bean.getDefaultValue());
}
8、 POJO .
@Test
public void parentChildBean() {
// ,parent Childs child1,child2, child1/child2 parent parent.
ParentChildBean parent = new ParentChildBean("parent");
ParentChildBean child1 = new ParentChildBean("child1");
child1.setParent(parent);
parent.getChilds().add(child1);
ParentChildBean child2 = new ParentChildBean("child2");
child2.setParent(parent);
parent.getChilds().add(child2);
String jsonString = "{"childs":[{"name":"child1"},{"name":"child2"}],"name":"parent"}";
// parent json ,json childs child1/child2 parent
assertEquals(jsonString, mapper.toJson(parent));
// child1, parent, 。
assertEquals("{"name":"child1"}", mapper.toJson(child1));
// ,Json parent child1/child2 .
ParentChildBean parentResult = mapper.fromJson(jsonString, ParentChildBean.class);
assertEquals("parent", parentResult.getChilds().get(0).getParent().getName());
}
POJO POJO Bean,@JsonBackReference @JsonManagedReference .
public static class ParentChildBean {
private String name;
private ParentChildBean parent;
public List<ParentChildBean> childs = Lists.newArrayList();
public ParentChildBean() {
}
public ParentChildBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// getter setter annotation
@JsonBackReference
public ParentChildBean getParent() {
return parent;
}
@JsonBackReference
public void setParent(ParentChildBean parent) {
this.parent = parent;
}
@JsonManagedReference
public List<ParentChildBean> getChilds() {
return childs;
}
@JsonManagedReference
public void setChilds(List<ParentChildBean> childs) {
this.childs = childs;
}
}
9、 Bean, , Map , Bean .
@Test
public void extensibleBean() {
// Map JSON .
String jsonString = "{"name" : "Foobar","age" : 37,"occupation" : "coder man"}";
ExtensibleBean extensibleBean = mapper.fromJson(jsonString, ExtensibleBean.class);
assertEquals("Foobar", extensibleBean.getName());
assertEquals(null, extensibleBean.getProperties().get("name"));
assertEquals("coder man", extensibleBean.getProperties().get("occupation"));
}
Bean.@JsonAnySetter @JsonAnyGetter .
public static class ExtensibleBean {
private String name; // we always have name
private HashMap<String, String> properties = Maps.newHashMap();
public ExtensibleBean() {
}
@JsonAnySetter
public void add(String key, String value) {
properties.put(key, value);
}
@JsonAnyGetter
public Map<String, String> getProperties() {
return properties;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
10、 Bean View , @JsonIgnore .
@Test
public void viewBean() throws JsonGenerationException, JsonMappingException, IOException {
ViewBean viewBean = new ViewBean();
viewBean.setName("Foo");
viewBean.setAge(16);
viewBean.setOtherValue("others");
viewBean.setIgnoreValue("ignored");
ObjectWriter publicWriter = mapper.getMapper().writerWithView(Views.Public.class);
assertEquals("{"otherValue":"others","name":"Foo"}", publicWriter.writeValueAsString(viewBean));
ObjectWriter internalWriter = mapper.getMapper().writerWithView(Views.Internal.class);
assertEquals("{"age":16,"otherValue":"others"}", internalWriter.writeValueAsString(viewBean));
// @Json
JsonMapper newMapper = JsonMapper.buildNormalMapper();
newMapper.getMapper().configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false);
publicWriter = newMapper.getMapper().writerWithView(Views.Public.class);
assertEquals("{"name":"Foo"}", publicWriter.writeValueAsString(viewBean));
}
public static class Views {
static class Public {
}
static class Internal {
}
}
View Bean.
public static class ViewBean {
private String name;
private int age;
private String otherValue;
private String ignoreValue;
@JsonView(Views.Public.class)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@JsonView(Views.Internal.class)
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getOtherValue() {
return otherValue;
}
public void setOtherValue(String otherValue) {
this.otherValue = otherValue;
}
@JsonIgnore
public String getIgnoreValue() {
return ignoreValue;
}
public void setIgnoreValue(String ignoreValue) {
this.ignoreValue = ignoreValue;
}
}
11、
@Test
public void customConverter() {
JsonMapper newMapper = JsonMapper.buildNonNullMapper();
SimpleModule testModule = new SimpleModule("MyModule", new Version(1, 0, 0, null));
testModule.addSerializer(new MoneySerializer()); // assuming serializer declares correct class to bind to
testModule.addDeserializer(Money.class, new MoneyDeserializer());
newMapper.getMapper().registerModule(testModule);
Money money = new Money(1.2);
String jsonString = newMapper.toJson(money);
assertEquals(""1.2"", jsonString);
Money resultMoney = newMapper.fromJson(jsonString, Money.class);
assertEquals(new Double(1.2), resultMoney.value);
}
public class MoneySerializer extends SerializerBase<Money> {
public MoneySerializer() {
super(Money.class);
}
public void serialize(Money value, JsonGenerator jgen, SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.writeString(value.toString());
}
}
public class MoneyDeserializer extends StdDeserializer<Money> {
public MoneyDeserializer() {
super(Money.class);
}
@Override
public Money deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
JsonProcessingException {
return Money.valueOf(jp.getText());
}
}
public static class Money {
private Double value;
public Money(Double value) {
this.value = value;
}
public static Money valueOf(String value) {
Double srcValue = Double.valueOf(value);
return new Money(srcValue);
}
public String toString() {
return value.toString();
}
}
12、
@Test
public void customPropertyNameing() throws JsonMappingException {
TestBean bean = new TestBean("foo");
bean.setDefaultValue("bar");
JsonMapper newMapper = JsonMapper.buildNonNullMapper();
newMapper.getMapper().setPropertyNamingStrategy(new LowerCaseNaming());
String jsonpString = newMapper.toJson(bean);
assertEquals("{"name":"foo","defaultvalue":"bar"}", jsonpString);
}
public static class LowerCaseNaming extends PropertyNamingStrategy {
@Override
public String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {
return defaultName.toLowerCase();
}
}
13、 jsonp .
@Test
public void jsonp() {
TestBean bean = new TestBean("foo");
String jsonpString = mapper.toJsonP("callback", bean);
assertEquals("callback({"name":"foo"})", jsonpString);
}
Bean, Mapper Null , .
public static class TestBean {
private String name;
private String defaultValue = "hello"; // ,
private String nullValue = null; // ,
public TestBean() {
}
public TestBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
public String getNullValue() {
return nullValue;
}
public void setNullValue(String nullValue) {
this.nullValue = nullValue;
}
@Override
public String toString() {
return "TestBean [defaultValue=" + defaultValue + ", name=" + name + ", nullValue=" + nullValue + "]";
}
}
}