=================================================================
最新jacson使用例子:
需要3个包的支持:
1. jackson-core-2.2.3.jar
2. jackson-databind-2.2.3.jar
3. jackson-annotations-2.2.3.jar
public static String bean2Json(Object obj) throws IOException {
ObjectMapper mapper = new ObjectMapper();
StringWriter sw = new StringWriter();
JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
mapper.writeValue(gen, obj);
gen.close();
return sw.toString();
}
public static T json2Bean(String jsonStr, Class objClass)
throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(jsonStr, objClass);
}
==============================================================================================
lib:
jackson-core-asl-1.6.0.jar
jackson-mapper-asl-1.6.0.jar
心得:最方便的是Full Data Binding方式,不用额外处理,但是POJO的属性名需要与JSON的变量名一一对应。对于需要做JSON变量名和POJO属性名转换的话,使用TreeModel。
Jackson提供了三种方式处理JSON
Streaming API, 基于事件处理JSON,类似StAXAPI。性能最好,其它两种方法都是建立在它之上
Tree Model 提供了内建文档树方式来展现JSON,类似XML DOM。最灵活。
Data Binding 使用注释或者属性访问器JSON与POJOs之间转换。最方便。
以下是官方网站的例子
1.Full Data Bindaing(POJO) Example
{
"name" : { "first" : "Joe", "last" : "Sixpack" },
"gender" : "MALE",
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
}
- public class User{
- public enum Gender{
- MALE, FEMALE
- };
- public static class Name{
- private String _first,_last;
- public String getFirst(){
- return_first;
- }
- public String getLast(){
- return_last;
- }
- public void setFirst(String s){
- _first = s;
- }
- public void setLast(String s){
- _last = s;
- }
- }
- private Gender_gender;
- private Name_name;
- private boolean_isVerified;
- private byte[]_userImage;
- public Name getName(){
- return_name;
- }
- public boolean isVerified(){
- return_isVerified;
- }
- public Gender getGender(){
- return_gender;
- }
- public byte[] getUserImage(){
- return_userImage;
- }
- public void setName(Name n){
- _name = n;
- }
- public voidsetVerified(boolean b){
- _isVerified = b;
- }
- public void setGender(Gender g){
- _gender = g;
- }
- public voidsetUserImage(byte[] b){
- _userImage = b;
- }
- }
public class User {
public enum Gender {
MALE, FEMALE
};
public static class Name {
private String _first, _last;
public String getFirst() {
return _first;
}
public String getLast() {
return _last;
}
public void setFirst(String s) {
_first = s;
}
public void setLast(String s) {
_last = s;
}
}
private Gender _gender;
private Name _name;
private boolean _isVerified;
private byte[] _userImage;
public Name getName() {
return _name;
}
public boolean isVerified() {
return _isVerified;
}
public Gender getGender() {
return _gender;
}
public byte[] getUserImage() {
return _userImage;
}
public void setName(Name n) {
_name = n;
}
public void setVerified(boolean b) {
_isVerified = b;
}
public void setGender(Gender g) {
_gender = g;
}
public void setUserImage(byte[] b) {
_userImage = b;
}
}
- ObjectMapper mapper =newObjectMapper(); // canreuse, share globally
- User user = mapper.readValue(newFile("user.json"),User.class); //从文件中读取
- mapper.writeValue(newFile("user-modified.json"),user); //写入文件
- mapper.writeValue(response.getOutputStream(),person); //如果是servlet,这里是写入流中送到jsp页面
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
User user = mapper.readValue(new File("user.json"), User.class);
mapper.writeValue(new File("user-modified.json"), user);
2.Simple Data Binding Example
Map userData = mapper.readValue(new File("user.json"),Map.class);
userData = new HashMap();
Map nameStruct = new HashMap();
nameStruct.put("first", "Joe");
nameStruct.put("last", "Sixpack");
userData.put("name", nameStruct);
userData.put("gender", "MALE");
userData.put("verified", Boolean.FALSE);
userData.put("userImage", "Rm9vYmFyIQ==");
mapper.writeValue(new File("user-modified.json"), userData);
Concrete Java types that Jackson will use for simple data bindingare:
JSON Type | Java Type |
object | LinkedHashMap |
array | ArrayList |
string | String |
number (no fraction) | Integer, Long or BigInteger (smallest applicable) |
number (fraction) | Double (configurable to use BigDecimal) |
true false | Boolean |
null | null |
3.The Model Example
- ObjectMapper m = newObjectMapper();
- // can either usemapper.readTree(JsonParser), or bind toJsonNode
- JsonNode rootNode =m.readValue(newFile("user.json"),JsonNode.class);
- // ensure that "last name"isn't "Xmler"; if is, change to "Jsoner"
- JsonNode nameNode = rootNode.path("name");
- String lastName = nameNode.path("last").getTextValue();
- if("xmler".equalsIgnoreCase(lastName)){
- ((ObjectNode)nameNode).put("last", "Jsoner");
- }
- // and write itout:
- m.writeValue(newFile("user-modified.json"),rootNode);
===========================================================================================
[代码] 首先创建一个User对象类(User.java)
01 | package com.sivalabs.json; |
07 | private UserName userName; |
11 | public StringtoString(){ |
12 | return "User [dob=" + dob + ",userId=" + userId + ",userName=" + userName + "]" ; |
[代码] UserName.java
01 | package com.sivalabs.json; |
04 | private String firstname; |
05 | private String middlename; |
06 | private String lastname; |
09 | public StringtoString() |
11 | return "UserName [firstname=" + firstname+ |
12 | ",lastname=" + lastname+ |
13 | ",middlename=" + middlename + "]" ; |
[代码] [Java]代码
01 | //接下来创建User实例,并生成JSON数据 |
03 | ObjectMapper mapper = new ObjectMapper(); |
05 | UserName userName = new UserName(); |
06 | userName.setFirstname( "Katamreddy" ); |
07 | userName.setMiddlename( "Siva" ); |
08 | userName.setLastname( "PrasadReddy" ); |
12 | user.setUserName(userName); |
13 | user.setDob( new Date()); |
15 | Writer strWriter = new StringWriter(); |
16 | mapper.writeValue(strWriter, user); |
17 | String userDataJSON = strWriter.toString(); |
18 | System.out.println(userDataJSON); |
[代码] 执行结果
05 | "firstname":"Katamreddy", |
07 | "lastname":"PrasadReddy" |
[代码] 接下来进行JSON到Java对象的转换
2 | "{"userId":"100","userName":{"firstname":"K"" + |
3 | ","middlename":"Siva","lastname":"Prasad"},"dob":1300878089906}" ; |
4 | User userFromJSON = mapper.readValue(userDataJSON,User. class ); |
5 | System.out.println(userFromJSON); |
[代码] 时间的格式化处理
1 | DateFormat dateFormat = new SimpleDateFormat( "MM-dd-yyyy" ); |
2 | SerializationConfig serConfig =mapper.getSerializationConfig(); |
3 | serConfig.setDateFormat(dateFormat); |
4 | DeserializationConfig deserializationConfig =mapper.getDeserializationConfig(); |
5 | deserializationConfig.setDateFormat(dateFormat); |
6 | mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false ); |
[代码] [Java]代码
2 | User user = mapper.readValue( new File( "user.json" ),User. class ); |