JackSon入门
来源:互联网 发布:少女前线 mac 10 旋风 编辑:程序博客网 时间:2024/06/05 17:49
Jackson有三种处理方式: Streaming API
使用org.codehaus.jackson.JsonParser 进行读操作 , 使用org.codehaus.jackson.JsonGenerator 写操作 Jackson Streaming API有点类似 Stax API
数据绑定 它允许我们把Json转换成Java对象,也可以把Java对象转换成Json对象
org.codehaus.jackson.map.ObjectMapper 知道如何把Json数据绑定成为(或者映射回)Java对象
树模型 通过进驻内存的树形结构来方便的访问Json数据
和数据绑定方式类似,树模型也使用了
org.codehaus.jackson.map.ObjectMapper进行Json数据和Java对象的绑定;只是树形结构由 org.codehaus.jackson.map.JsonNode节点组成
从使用的角度看,上述三种方式可以归纳为 :
Streaming API是性能最优的(开销最小,最快的读写速度) 注:在我看来,操作最随心所欲的 数据绑定是最方便使用的 树形模型又是最灵活的
Java类: Java代码
1. public class User {
2. public enum Gender { MALE, FEMALE }; 3.
4. public static class Name {
5. private String _first, _last; 6.
7. public String getFirst() { return _first; }
8. public String getLast() { return _last; } 9.
10. public void setFirst(String s) { _first = s; } 11. public void setLast(String s) { _last = s; } 12. } 13.
14. private Gender _gender; 15. private Name _name;
16. private boolean _isVerified; 17. private byte[] _userImage; 18.
19. public Name getName() { return _name; }
20. public boolean isVerified() { return _isVerified; } 21. public Gender getGender() { return _gender; }
22. public byte[] getUserImage() { return _userImage; } 23.
24. public void setName(Name n) { _name = n; }
25. public void setVerified(boolean b) { _isVerified = b; }
26. public void setGender(Gender g) { _gender = g; }
27. public void setUserImage(byte[] b) { _userImage = b; } 28.}
Java代码
1. public class User {
2. public enum Gender { MALE, FEMALE }; 3.
4. public static class Name {
5. private String _first, _last; 6.
7. public String getFirst() { return _first; } 8. public String getLast() { return _last; } 9.
10. public void setFirst(String s) { _first = s; } 11. public void setLast(String s) { _last = s; } 12. } 13.
14. private Gender _gender; 15. private Name _name;
16. private boolean _isVerified; 17. private byte[] _userImage; 18.
19. public Name getName() { return _name; }
20. public boolean isVerified() { return _isVerified; } 21. public Gender getGender() { return _gender; }
22. public byte[] getUserImage() { return _userImage; } 23.
24. public void setName(Name n) { _name = n; }
25. public void setVerified(boolean b) { _isVerified = b; } 26. public void setGender(Gender g) { _gender = g; }
27. public void setUserImage(byte[] b) { _userImage = b; } 28.}
JSon数据: Java代码
1. {
2. "name" : { "first" : "Joe", "last" : "Sixpack" }, 3. "gender" : "MALE", 4. "verified" : false,
5. "userImage" : "Rm9vYmFyIQ==" 6.
Java代码
1. {
2. "name" : { "first" : "Joe", "last" : "Sixpack" }, 3. "gender" : "MALE", 4. "verified" : false,
5. "userImage" : "Rm9vYmFyIQ==" 6. }
Streaming API (这部分我比较关注,就先翻译下)比数据绑定的方式会快20%到30% 写操作: Java代码
1. JsonFactory f = new JsonFactory();
2. JsonGenerator g = f.createJsonGenerator(new File("user.json")); 3.
4. g.writeStartObject();
5. g.writeObjectFieldStart("name"); 6. g.writeStringField("first", "Joe"); 7. g.writeStringField("last", "Sixpack"); 8. g.writeEndObject(); // for field 'name' 9. g.writeStringField("gender", Gender.MALE); 10.g.writeBooleanField("verified", false);
11.g.writeFieldName("userImage"); // no 'writeBinaryField' (yet?)
12.byte[] binaryData = ...; 13.g.writeBinary(binaryData); 14.g.writeEndObject();
Java代码
1. JsonFactory f = new JsonFactory();
2. JsonGenerator g = f.createJsonGenerator(new File("user.json")); 3.
4. g.writeStartObject();
5. g.writeObjectFieldStart("name"); 6. g.writeStringField("first", "Joe"); 7. g.writeStringField("last", "Sixpack"); 8. g.writeEndObject(); // for field 'name' 9. g.writeStringField("gender", Gender.MALE); 10.g.writeBooleanField("verified", false);
11.g.writeFieldName("userImage"); // no 'writeBinaryField' (yet?)
12.byte[] binaryData = ...; 13.g.writeBinary(binaryData); 14.g.writeEndObject(); 读操作: Java代码
1. JsonFactory f = new JsonFactory();
2. JsonParser jp = f.createJsonParser(new File("user.json")); 3. User user = new User();
4. jp.nextToken(); // will return JsonToken.START_OBJECT (verify?)
5. while (jp.nextToken() != JsonToken.END_OBJECT) { 6. String fieldname = jp.getCurrentName();
7. jp.nextToken(); // move to value, or START_OBJECT/START_ARRAY
8. if ("name".equals(fieldname)) { // contains an object 9. Name name = new Name();
10. while (jp.nextToken() != JsonToken.END_OBJECT) { 11. String namefield = jp.getCurrentName(); 12. jp.nextToken(); // move to value 13. if ("first".equals(namefield)) { 14. name.setFirst(jp.getText());
15. } else if ("last".equals(namefield)) { 16. name.setLast(jp.getText()); 17. } else {
18. throw new IllegalStateException("Unrecognized field '"+fieldname+"'!"); 19. } 20. }
21. user.setName(name);
22. } else if ("gender".equals(fieldname)) {
23. user.setGender(Gender.valueOf(jp.getText())); 24. } else if ("verified".equals(fieldname)) {
25. user.setVerified(jp.getCurrentToken() == JsonToken.VALUE_TRUE);
26. } else if ("userImage".equals(fieldname)) { 27. user.setUserImage(jp.getBinaryValue()); 28. } else {
29. throw new IllegalStateException("Unrecognized field '"+fieldname+"'!"); 30. }
Java代码
1. ReadJSON.java
2. JsonFactory f = new JsonFactory();
3. JsonParser jp = f.createJsonParser(new File("user.json")); 4. User user = new User();
5. jp.nextToken(); // will return JsonToken.START_OBJECT (verify?)
6. while (jp.nextToken() != JsonToken.END_OBJECT) { 7. String fieldname = jp.getCurrentName();
8. jp.nextToken(); // move to value, or START_OBJECT/START_ARRAY
9. if ("name".equals(fieldname)) { // contains an object 10. Name name = new Name();
11. while (jp.nextToken() != JsonToken.END_OBJECT) { 12. String namefield = jp.getCurrentName(); 13. jp.nextToken(); // move to value 14. if ("first".equals(namefield)) { 15. name.setFirst(jp.getText());
16. } else if ("last".equals(namefield)) { 17. name.setLast(jp.getText()); 18. } else {
19. throw new IllegalStateException("Unrecognized field '"+fieldname+"'!"); 20. } 21. }
22. user.setName(name);
23. } else if ("gender".equals(fieldname)) {
24. user.setGender(Gender.valueOf(jp.getText())); 25. } else if ("verified".equals(fieldname)) {
26. user.setVerified(jp.getCurrentToken() == JsonToken.VALUE_TRUE);
27. } else if ("userImage".equals(fieldname)) { 28. user.setUserImage(jp.getBinaryValue()); 29. } else {
30. throw new IllegalStateException("Unrecognized field '"+fieldname+"'!"); 31. } 32.}
数据绑定: Java代码
1. //读
2. ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
3. User user = mapper.readValue(new File("user.json"), User.class); 4.
5. //写
6. mapper.writeValue(<span class="code-keyword">new</span> 7. 8.
9. File(<span class="code-quote">"user-modified.json"</span>
10. 11.
12.), user);}
Java代码
1. //读
2. ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
3. User user = mapper.readValue(new File("user.json"), User.class); 4.
5. //写
6. mapper.writeValue(<SPAN class=code-keyword>new</SPAN> 7. 8. 9.
10. File(<SPAN class=code-quote>"user-modified.json"</SPAN> 11. 12. 13.
14.), user); 无类型的数据绑定: Java代码
1. HashMap<String,Object> untyped = new HashMap<String,Object>();
2. HashMap<String,String> nameStruct = new HashMap<String,String>();
3. nameStruct.put("first", "Joe"); 4. nameStruct.put("last", "Sixpack"); 5. untyped.put("name", nameStruct); 6. untyped.put("gender", "MALE");
7. untyped.put("verified", Boolean.FALSE); 8. untyped.put("userImage", "Rm9vYmFyIQ==");
Java代码
1. HashMap<String,Object> untyped = new HashMap<String,Object>();
2. HashMap<String,String> nameStruct = new HashMap<String,String>();
3. nameStruct.put("first", "Joe"); 4. nameStruct.put("last", "Sixpack"); 5. untyped.put("name", nameStruct); 6. untyped.put("gender", "MALE");
7. untyped.put("verified", Boolean.FALSE); 8. untyped.put("userImage", "Rm9vYmFyIQ==");
树模型:
可以使用Stream API或者数据绑定的方式写或者ObjectMapper读取树树结构 ObjectMapper的方式: Java代码
1. ObjectMapper m = new ObjectMapper();
2. // can either use mapper.readTree(JsonParser), or bind to JsonNode
3. JsonNode rootNode = m.readValue(new File("user.json"), JsonNode.class);
4. // ensure that "last name" isn't "Xmler"; if is, change to "Jsoner"
5. JsonNode nameNode = rootNode.path("name");
6. String lastName = nameNode.path("last").getTextValue(). 7. if ("xmler".equalsIgnoreCase(lastName)) {
8. ((ObjectNode)nameNode).put("last", "Jsoner"); 9. }
10.// and write it out:
11.m.writeValue(new File("user-modified.json"), rootNode); Java代码
1. ObjectMapper m = new ObjectMapper();
2. // can either use mapper.readTree(JsonParser), or bind to JsonNode
3. JsonNode rootNode = m.readValue(new File("user.json"), JsonNode.class);
4. // ensure that "last name" isn't "Xmler"; if is, change to "Jsoner"
5. JsonNode nameNode = rootNode.path("name");
6. String lastName = nameNode.path("last").getTextValue(). 7. if ("xmler".equalsIgnoreCase(lastName)) {
8. ((ObjectNode)nameNode).put("last", "Jsoner"); 9. }
10.// and write it out:
11.m.writeValue(new File("user-modified.json"), rootNode);
绝招:可以在JsonParser和JsonGenerator中直接使用数据绑定或者树模型的方式的,看一下以下方法就知道怎么用了
JsonParser.readValueAs() JsonParser.readValueAsTree() JsonGenerator.writeObject() JsonGenerator.writeTree()
- jackson 入门
- JackSon入门
- Jackson 入门
- Jackson入门
- Jackson 入门
- jackson快速入门
- 【JackSon Json】 入门1
- jackson json 简单入门
- jackson快速入门
- jackson快速入门
- Jackson使用入门
- Jackson快速入门
- jackson官方快速入门文档
- JackSon
- jackson
- Jackson
- jackson
- jackson
- Hadoop学习笔记之五:使用Eclipse插件
- plsql简单实用的便捷式设置
- 【centos6 , 6】linux 查看帮助文档:
- div+css 学习笔记2
- 智能指针
- JackSon入门
- 一个库搞定各种分享--ShareSDK
- 【centos6 , 7】 网络原理、网络配置
- jive论坛
- NYOJ 48 小明的调查作业
- 偶数求和
- 在北京的那三年——找工作
- Android源码分析-点击事件派发机制
- a+b