二、Java对象转换成JSON
1、 JavaBean(Entity/Model)转换成JSON
- /**
- * <b>function:</b>将java对象转换成json字符串
- * @author hoojo
- * @createDate 2010-11-23 下午06:01:10
- */
- @Test
- public void writeEntityJSON() {
- try {
- System.out.println("jsonGenerator");
- //writeObject可以转换java对象,eg:JavaBean/Map/List/Array等
- jsonGenerator.writeObject(bean);
- System.out.println();
- System.out.println("ObjectMapper");
- //writeValue具有和writeObject相同的功能
- objectMapper.writeValue(System.out, bean);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
运行后结果如下:
- jsonGenerator
- {"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"}
- ObjectMapper
- {"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"}
上面分别利用JsonGenerator的writeObject方法和ObjectMapper的writeValue方法完成对Java对象的转换,二者传递的参数及构造的方式不同;JsonGenerator的创建依赖于ObjectMapper对象。也就是说如果你要使用JsonGenerator来转换JSON,那么你必须创建一个ObjectMapper。但是你用ObjectMapper来转换JSON,则不需要JSONGenerator。
objectMapper的writeValue方法可以将一个Java对象转换成JSON。这个方法的参数一,需要提供一个输出流,转换后可以通过这个流来输出转换后的内容。或是提供一个File,将转换后的内容写入到File中。当然,这个参数也可以接收一个JSONGenerator,然后通过JSONGenerator来输出转换后的信息。第二个参数是将要被转换的Java对象。如果用三个参数的方法,那么是一个Config。这个config可以提供一些转换时的规则,过指定的Java对象的某些属性进行过滤或转换等。
2、 将Map集合转换成Json字符串
- /**
- * <b>function:</b>将map转换成json字符串
- * @author hoojo
- * @createDate 2010-11-23 下午06:05:26
- */
- @Test
- public void writeMapJSON() {
- try {
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("name", bean.getName());
- map.put("account", bean);
- bean = new AccountBean();
- bean.setAddress("china-Beijin");
- bean.setEmail("hoojo@qq.com");
- map.put("account2", bean);
- System.out.println("jsonGenerator");
- jsonGenerator.writeObject(map);
- System.out.println("");
- System.out.println("objectMapper");
- objectMapper.writeValue(System.out, map);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
转换后结果如下:
- jsonGenerator
- {"account2":{"address":"china-Beijin","name":null,"id":0,"birthday":null,"email":"hoojo@qq.com"},"name":"hoojo",
- "account":{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"}}
- objectMapper
- {"account2":{"address":"china-Beijin","name":null,"id":0,"birthday":null,"email":"hoojo@qq.com"},"name":"hoojo",
- "account":{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"}}
3、 将List集合转换成json
- /**
- * <b>function:</b>将list集合转换成json字符串
- * @author hoojo
- * @createDate 2010-11-23 下午06:05:59
- */
- @Test
- public void writeListJSON() {
- try {
- List<AccountBean> list = new ArrayList<AccountBean>();
- list.add(bean);
- bean = new AccountBean();
- bean.setId(2);
- bean.setAddress("address2");
- bean.setEmail("email2");
- bean.setName("haha2");
- list.add(bean);
- System.out.println("jsonGenerator");
- //list转换成JSON字符串
- jsonGenerator.writeObject(list);
- System.out.println();
- System.out.println("ObjectMapper");
- //用objectMapper直接返回list转换成的JSON字符串
- System.out.println("1###" + objectMapper.writeValueAsString(list));
- System.out.print("2###");
- //objectMapper list转换成JSON字符串
- objectMapper.writeValue(System.out, list);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
结果如下:
- jsonGenerator
- [{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"},
- {"address":"address2","name":"haha2","id":2,"birthday":null,"email":"email2"}]
- ObjectMapper
- 1###[{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"},
- {"address":"address2","name":"haha2","id":2,"birthday":null,"email":"email2"}]
- 2###[{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"},
- {"address":"address2","name":"haha2","id":2,"birthday":null,"email":"email2"}]
外面就是多了个[]中括号;同样Array也可以转换,转换的JSON和上面的结果是一样的,这里就不再转换了。~.~
4、下面来看看jackson提供的一些类型,用这些类型完成json转换;如果你使用这些类型转换JSON的话,那么你即使没有JavaBean(Entity)也可以完成复杂的Java类型的JSON转换。下面用到这些类型构建一个复杂的Java对象,并完成JSON转换。
- @Test
- public void writeOthersJSON() {
- try {
- String[] arr = { "a", "b", "c" };
- System.out.println("jsonGenerator");
- String str = "hello world jackson!";
- //byte
- jsonGenerator.writeBinary(str.getBytes());
- //boolean
- jsonGenerator.writeBoolean(true);
- //null
- jsonGenerator.writeNull();
- //float
- jsonGenerator.writeNumber(2.2f);
- //char
- jsonGenerator.writeRaw("c");
- //String
- jsonGenerator.writeRaw(str, 5, 10);
- //String
- jsonGenerator.writeRawValue(str, 5, 5);
- //String
- jsonGenerator.writeString(str);
- jsonGenerator.writeTree(JsonNodeFactory.instance.POJONode(str));
- System.out.println();
- //Object
- jsonGenerator.writeStartObject();//{
- jsonGenerator.writeObjectFieldStart("user");//user:{
- jsonGenerator.writeStringField("name", "jackson");//name:jackson
- jsonGenerator.writeBooleanField("sex", true);//sex:true
- jsonGenerator.writeNumberField("age", 22);//age:22
- jsonGenerator.writeEndObject();//}
- jsonGenerator.writeArrayFieldStart("infos");//infos:[
- jsonGenerator.writeNumber(22);//22
- jsonGenerator.writeString("this is array");//this is array
- jsonGenerator.writeEndArray();//]
- jsonGenerator.writeEndObject();//}
- AccountBean bean = new AccountBean();
- bean.setAddress("address");
- bean.setEmail("email");
- bean.setId(1);
- bean.setName("haha");
- //complex Object
- jsonGenerator.writeStartObject();//{
- jsonGenerator.writeObjectField("user", bean);//user:{bean}
- jsonGenerator.writeObjectField("infos", arr);//infos:[array]
- jsonGenerator.writeEndObject();//}
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
运行后,结果如下:
- jsonGenerator
- "aGVsbG8gd29ybGQgamFja3NvbiE=" true null 2.2c world jac worl "hello world jackson!" "hello world jackson!"
- {"user":{"name":"jackson","sex":true,"age":22},"infos":[22,"this is array"]}
- {"user":{"address":"address","name":"haha","id":1,"birthday":null,"email":"email"},"infos":["a","b","c"]}
怎么样?构造的json字符串和输出的结果是一致的吧。关键看懂用JSONGenerator提供的方法,完成一个Object的构建。