参考资料:
首先添加maven依赖(版本用最新的):
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
然后是POJO对象:
package jackson.pojo; import java.util.ArrayList; import java.util.List; public class User { private int age = 29; private String name = "mkyong"; private List<String> messages = new ArrayList<String>() { private static final long serialVersionUID = 1L; { add("msg 1"); add("msg 2"); add("msg 3"); } }; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<String> getMessages() { return messages; } public void setMessages(List<String> messages) { this.messages = messages; } }
接下来,先测试JAVA对象-->JSON:
package jackson.tojson; import jackson.pojo.User; import java.io.File; import org.codehaus.jackson.map.ObjectMapper; public class JacksonExample { public static void main(String[] args) throws Exception { User user = new User(); ObjectMapper mapper = new ObjectMapper(); // convert user object to json string, and save to a file mapper.writeValue(new File("e:\\user.json"), user); // display to console System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user)); } }
然后测试JSON->JAVA对象:
package jackson.fromjson; import jackson.pojo.User; import java.io.File; import org.codehaus.jackson.map.ObjectMapper; public class JacksonExample { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); // read from file, convert it to user class User user = mapper.readValue(new File("e:\\user.json"), User.class); // display to console System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user)); } }
JSON->Map:
package jackson.json2map; import java.util.HashMap; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; public class JsonMapExample { public static void main(String[] args) { String json = "{\"name\":\"mkyong\", \"age\":\"29\"}"; Map<String,String> map = new HashMap<String,String>(); ObjectMapper mapper = new ObjectMapper(); try { //convert JSON string to Map map = mapper.readValue(json, new TypeReference<HashMap<String,String>>(){}); System.out.println(map); } catch (Exception e) { e.printStackTrace(); } } }
Map->JSON:
package jackson.map2json; import java.util.HashMap; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; public class MapJsonExample { public static void main(String[] args) { try { ObjectMapper mapper = new ObjectMapper(); String json = ""; Map<String, String> map = new HashMap<String, String>(); map.put("name", "mkyong"); map.put("age", "29"); //convert map to JSON string json = mapper.writeValueAsString(map); System.out.println(json); } catch (Exception e) { e.printStackTrace(); } } }
Map->JSON File:
package jackson.map2file; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; public class JsonMapFileExample { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = new HashMap<String, Object>(); map.put("name", "mkyong"); map.put("age", 29); List<Object> list = new ArrayList<Object>(); list.add("msg 1"); list.add("msg 2"); list.add("msg 3"); map.put("messages", list); try { // write JSON to a file mapper.writeValue(new File("e:\\user.json"), map); } catch (Exception e) { e.printStackTrace(); } } }
JSON FILE->Map:
package jackson.file2map; import java.io.File; import java.util.ArrayList; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; public class JsonFileMapExample { public static void main(String[] args) { try { ObjectMapper mapper = new ObjectMapper(); // read JSON from a file Map<String, Object> map = mapper.readValue( new File("e:\\user.json"), new TypeReference<Map<String, Object>>() { }); System.out.println(map.get("name")); System.out.println(map.get("age")); @SuppressWarnings("unchecked") ArrayList<String> list = (ArrayList<String>) map.get("messages"); for (String msg : list) { System.out.println(msg); } } catch (Exception e) { e.printStackTrace(); } } }
用树的方式操作JSON:
package jackson.treemodel; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Iterator; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.node.ObjectNode; public class JacksonTreeNodeExample { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); try { BufferedReader fileReader = new BufferedReader( new FileReader("e:\\user.json")); JsonNode rootNode = mapper.readTree(fileReader); /*** read ***/ JsonNode nameNode = rootNode.path("name"); System.out.println(nameNode.getTextValue()); JsonNode ageNode = rootNode.path("age"); System.out.println(ageNode.getIntValue()); JsonNode msgNode = rootNode.path("messages"); Iterator<JsonNode> ite = msgNode.getElements(); while (ite.hasNext()) { JsonNode temp = ite.next(); System.out.println(temp.getTextValue()); } /*** update ***/ ((ObjectNode)rootNode).put("nickname", "new nickname"); ((ObjectNode)rootNode).put("name", "updated name"); ((ObjectNode)rootNode).remove("age"); mapper.writeValue(new File("e:\\user.json"), rootNode); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
用流的方式生成JSON:
package jackson.jsongenerator; import java.io.File; import java.io.IOException; import org.codehaus.jackson.JsonEncoding; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.map.JsonMappingException; public class JacksonStreamExample { public static void main(String[] args) { try { JsonFactory jfactory = new JsonFactory(); /*** write to file ***/ JsonGenerator jGenerator = jfactory.createJsonGenerator(new File( "e:\\user.json"), JsonEncoding.UTF8); jGenerator.writeStartObject(); // { jGenerator.writeStringField("name", "mkyong"); // "name" : "mkyong" jGenerator.writeNumberField("age", 29); // "age" : 29 jGenerator.writeFieldName("messages"); // "messages" : jGenerator.writeStartArray(); // [ jGenerator.writeString("msg 1"); // "msg 1" jGenerator.writeString("msg 2"); // "msg 2" jGenerator.writeString("msg 3"); // "msg 3" jGenerator.writeEndArray(); // ] jGenerator.writeEndObject(); // } jGenerator.close(); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
用流的方式解析JSON:
package jackson.parsejson; import java.io.File; import java.io.IOException; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.JsonToken; import org.codehaus.jackson.map.JsonMappingException; public class JacksonStreamExample { public static void main(String[] args) { try { JsonFactory jfactory = new JsonFactory(); /*** read from file ***/ JsonParser jParser = jfactory.createJsonParser(new File("e:\\user.json")); // loop until token equal to "}" while (jParser.nextToken() != JsonToken.END_OBJECT) { String fieldname = jParser.getCurrentName(); if ("name".equals(fieldname)) { // current token is "name", // move to next, which is "name"'s value jParser.nextToken(); System.out.println(jParser.getText()); // display mkyong } if ("age".equals(fieldname)) { // current token is "age", // move to next, which is "name"'s value jParser.nextToken(); System.out.println(jParser.getIntValue()); // display 29 } if ("messages".equals(fieldname)) { jParser.nextToken(); // current token is "[", move next // messages is array, loop until token equal to "]" while (jParser.nextToken() != JsonToken.END_ARRAY) { // display msg1, msg2, msg3 System.out.println(jParser.getText()); } } } jParser.close(); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }