Json-lib.jarバッグJsonの実例プログラムに基づいて

20119 ワード

元のチェーン:http://www.cnblogs.com/langtianya/archive/2013/04/09/3009235.html
  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 + "]";
  }
 }
}