您的位置:首页 > 编程语言 > Java开发

Json学习(二):java和Jackson操作Json

2014-11-14 07:40 357 查看
另:Jackson解析json的文章与示例:Jackson实现json与java的转化

一、java api 操作Json

1、需要引进json的jar包,如:json-lib-2.3-jdk15.jar,还有很多这个jar用到的jar包,如commons-lang.jar等。

2、性能没有jackjson好,性能测试见:http://www.iteye.com/topic/561368

3、一般不建议使用。

二、使用字符串操作Json

1、在实际项目中也会存在这样的解析,后台输出的为json格式的字符串,可以使用字符串拼接的方式输出。

2、这种方法的局限性和效率是值得商榷的,但也是一种方法。如以下代码示例:

/** Out format: {key:value}*/
public static String toJson(String msgName, String msgValue) {

String jsonStr = null;

if (null == msgName || msgName.trim().length() == 0) {
return null;
}

jsonStr = "{\'" + msgName + "\':";

if (null == msgValue) {
msgValue = "";
}

jsonStr += "\'" + msgValue + "\'}";

return jsonStr;

}

/** Out format: [key,value]*/
public static String toJson(String msgName, Long msgValue) {

String jsonStr = null;

if (null == msgName || msgName.trim().length() == 0) {
return null;
}

jsonStr = "[\'" + msgName + "\',";

if (null == msgValue) {
msgValue = (long) 0;
}

jsonStr += msgValue + "]";

return jsonStr;

}

public static String toJson(HashMap<String, String> msgMap) {

String jsonStr = null;

if (null == msgMap || msgMap.size() == 0) {
return null;
}

Iterator<Entry<String, String>> it = msgMap.entrySet().iterator();
while (it.hasNext()) {
Entry<String, String> entry = it.next();

String msgName = entry.getKey();
String msgValue = entry.getValue();
if (null == msgValue) {
msgValue = "";
}

String tempStr = "\"" + msgName + "\":" + "\"" + msgValue + "\"";

if (null == jsonStr) {
jsonStr = tempStr;
} else {
jsonStr = jsonStr + "," + tempStr;
}
}

jsonStr = "{" + jsonStr + "}";

return jsonStr;

}


三、Jackson操作Json

需要Jackson的jar包,如:jackson-core-asl-1.9.2.jar、jackson-jaxrs-1.9.2.jar、jackson-mapper-asl-1.9.2.jar。

1、java类型数据转换成JSON格式

1)javaBean转换成Json对象

A、定义2个javaBean,UserInfoBean和AccountBean,代码如下

package json.jackson.entity;

/**
*
* UserInfoBean.java
*
* @Title 用户信息类
* @Des
* @author Sam-Sho
* @date 2014-9-29
*/
public class UserInfoBean {

private int id;
private String name;

//getter、setter

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}


package json.jackson.entity;

/**
*
* AccountBean.java
*
* @Title
* @Des
* @author Sam-Sho
* @date 2014-9-29
*/
public class AccountBean {
private int id;
private String name;
private String email;
private String address;
private Birthday birthday;

//getter、setter

@Override
public String toString() {
return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public Birthday getBirthday() {
return birthday;
}

public void setBirthday(Birthday birthday) {
this.birthday = birthday;
}
}


B、把javaBean转换成Json对象,利用jackson中JsonGenerator类的writeObject()方法

//构建一个bean
UserInfoBean userBean = new UserInfoBean();
userBean.setId(99999);
userBean.setName("ked");

// 利用ObjectMapper的writeObject()方法
ObjectMapper mapper = new ObjectMapper();
Writer sw = new StringWriter();//使用StringWriter
try {
JsonGenerator json = mapper.getJsonFactory().createJsonGenerator(sw);
json.writeObject(userBean);
sw.close();
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

String bean = sw.toString();
System.out.println(bean);


【输出】
{"id":99999,"name":"ked"}


2)、Map转换成Json对象。

//构建一个map
Map<String, String> map = new HashMap<String, String>();
map.put("ID", "123456789");
map.put("NAME", "SAM");
map.put("GENDER", "MAN");

//把map转换成json
ObjectMapper mapper = new ObjectMapper();
Writer sw = new StringWriter();
try {
JsonGenerator json = mapper.getJsonFactory().createJsonGenerator(sw);
json.writeObject(map);
sw.close();
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String mapJson = sw.toString();
System.out.println(mapJson);//{"NAME":"SAM","GENDER":"MAN","ID":"123456789"}


3)List转换成Json数组

//构建一个List
List<UserInfoBean> list = new ArrayList<UserInfoBean>();
UserInfoBean userBean = new UserInfoBean();
userBean.setId(99999);
userBean.setName("ked");

UserInfoBean userBean2 = new UserInfoBean();
userBean2.setId(111111);
userBean2.setName("SAM");

list.add(userBean);
list.add(userBean2);

//把List转换成json数组
ObjectMapper mapper = new ObjectMapper();
Writer sw = new StringWriter();
try {
JsonGenerator json = mapper.getJsonFactory().createJsonGenerator(sw);
json.writeObject(list);
sw.close();
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String objListJson = sw.toString();
System.out.println(objListJson);//[{"id":99999,"name":"ked"},{"id":111111,"name":"SAM"}]


4)可以封装成一个方法,objectToJson()。

/**
* Object转化为json数据
* @param object
* @return
*/
public static String objectToJson(Object object){
ObjectMapper mapper = new ObjectMapper();
Writer sw = new StringWriter();
try {
JsonGenerator json = mapper.getJsonFactory().createJsonGenerator(sw);
json.writeObject(object);
sw.close();
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sw.toString();
}


5)自定义拼接成Json字符串。这个挺有意思。

//拼接自定义json字符串
String[] arr = { "a", "b", "c" };
ObjectMapper objectMapper = new ObjectMapper();
JsonGenerator jsonGenerator = = objectMapper.getJsonFactory().createJsonGenerator(System.out, JsonEncoding.UTF8);

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();//}

【输出】
// {"user":{"name":"jackson","sex":true,"age":22},"infos":[22,"this is array"]}

// 拼接自定义json字符串2
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();//}

【输出】
//} {"user":{"id":1,"name":"haha","email":"email","address":"address","birthday":null},"infos":["a","b","c"]}


2、Json字符串转换成Java类型数据

1)json转换成javaBean,利用ObjectMapper.readValue()方法。

/**
* 将json字符串转换成JavaBean对象
*/

public void readJson2Entity() {
String json = "{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}";
ObjectMapper mapper = new ObjectMapper();
try {
AccountBean acc = mapper.readValue(json, AccountBean.class);
System.out.println(acc.getName());
System.out.println(acc);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
【输出】

haha
haha#1#address#null#email


2)将json字符串转换成List<Map>

/**
* json字符串转换成list
* 将json字符串转换成List<Map>
*/
@SuppressWarnings("unchecked")
public void readJson2List() {
String json = "[{\"address\": \"address2\",\"name\":\"haha2\",\"id\":2,\"email\":\"email2\"},"+
"{\"address\":\"address\",\"name\":\"haha\",\"id\":1,\"email\":\"email\"}]";
ObjectMapper mapper = new ObjectMapper();
try {
List<LinkedHashMap<String, Object>> list = mapper.readValue(json, List.class);
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
Map<String, Object> map = list.get(i);
Set<String> set = map.keySet();
for (Iterator<String> it = set.iterator();it.hasNext();) {
String key = it.next();
System.out.println(key + ":" + map.get(key));
}
}
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
【输出】

2
address:address2
name:haha2
id:2
email:email2
address:address
name:haha
id:1
email:email
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: