[javase][json] org.codehaus.jackson的使用

3 篇文章 0 订阅
PackageInfo.java
package test_2013_4_17;

/**
 * 
 * @ClassName Packages
 * 
 * @Project egame.server.open.biz
 * 
 * @Author yuchao
 * 
 * @Create Date  2013-4-17
 * 
 */

public class PackageInfo {
    private String package_name;
    private String version;
    /**
     * @return the package_name
     */
    public String getPackage_name() {
        return package_name;
    }
    /**
     * @param package_name the package_name to set
     */
    public void setPackage_name(String package_name) {
        this.package_name = package_name;
    }
    /**
     * @return the version
     */
    public String getVersion() {
        return version;
    }
    /**
     * @param version the version to set
     */
    public void setVersion(String version) {
        this.version = version;
    }
	@Override
	public String toString() {
		return "PackageInfo [package_name=" + package_name + ", version="
				+ version +"]";
	}
    
}


TestJson.java
package test_2013_4_17;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

public class TestJson {
	public static void main(String[] args) throws Exception {
		testJsonToObject();
		testJsonToList();
		testJsonToMap();
		testJsonMapInList();
    }
	
	/**
	 * json字符串转换成普通对象
	 */
	private static void testJsonToObject() throws Exception{
		String jsonStr = "{'package_name':'愤怒的小鸟','version':'1.01'}";
		ObjectMapper mapper = new ObjectMapper();
		//允许键值对的引号为单引号,否则只能为双引号
		mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
		PackageInfo packageInfo = mapper.readValue(jsonStr, PackageInfo.class);
		System.out.println(packageInfo);
	}
	
	/**
	 * json字符串转换成List
	 */
	private static void testJsonToList() throws Exception{
		String jsonStr = "[{'package_name':'愤怒的小鸟','version':'1.01'}" +
				",{'package_name':'愤怒的小鸟','version':'1.01'}]";
		ObjectMapper mapper = new ObjectMapper();
		mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
//		List<PackageInfo> packageInfos = mapper.readValue(jsonStr, List.class);
		List<PackageInfo> packageInfos = mapper.readValue(jsonStr,new TypeReference<List<PackageInfo>>(){ });
		System.out.println(packageInfos);
	}
	
	/**
	 * json字符串转换成Map 
	 */
	private static void testJsonToMap() throws Exception{
		String jsonStr = "{'xiaoniao':'1.01','360':'2.2'}";
		ObjectMapper mapper = new ObjectMapper();
		mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
//		Map map = mapper.readValue(jsonStr, Map.class);
		Map<String,String> map = mapper.readValue(jsonStr,new TypeReference<Map<String,String>>(){ });
		Set<String> set = map.keySet();
		Iterator<String> it = set.iterator();
		while (it.hasNext()) {
			String str = (String) it.next();
			System.out.println("key:"+str+", "+"value:"+map.get(str));
		}
	}
	
	/**
	 * 转换这种格式的json字符串到一个List<Map>对象
	 * [{'com.tencent.mm.apk':'0'},{'com.qihoo360.mobilesafe.apk':'1'}]
	 */
	private static void testJsonMapInList() throws Exception{
		String jsonStr = "[{'xiaoniao':'1.01'},{'360':'2.2'}]";
		ObjectMapper mapper = new ObjectMapper();
		mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
		//下面两种都可以
//		List<Map<String,String>> list = mapper.readValue(jsonStr, List.class);
		List<Map<String,String>> list = mapper.readValue(jsonStr,new TypeReference<List<Map<String,String>>>(){ });
		for(Map<String, String> map : list){
			Set<String> set = map.keySet();
			Iterator<String> it = set.iterator();
			while (it.hasNext()) {
				String str = (String) it.next();
				System.out.println("key:"+str+", "+"value:"+map.get(str));
			}
		}
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jackson所需要的所有jar jackson-all-1.6.2.jar jackson-core-asl-1.6.2.jar jackson-mapper-asl-1.6.2.jar jakarta-oro.jar 1. 背景 目前维护的产品使用jackson处理json,现整理一下jackson相关资料,希望对初次接触jackson的新手有所帮助。 jackson主页: http://jackson.codehaus.org/ jackson document: http://wiki.fasterxml.com/JacksonJavaDocs JacksonInFiveMinutes: http://wiki.fasterxml.com/JacksonInFiveMinutes 本文主要内容译自JacksonInFiveMinutes,增加了部分示例,转载请注明出处。 受java平台上各种处理xml的类库(StAX, JAXB等)启发,Jackson提供一种处理json的java类库。Jackson的目标是为开发者提供快速、准确、轻量级和用起来最爽的json处理类库。本文将概括介绍Jackson的主要功能和相关功能的使用示例。 2. 使用方式 Jackson提供三种可选的json处理方式: 1) Streaming API 又称Incremental parsing/generation, 受StAX API启发,以非关联递增方式读写json内容。 通过 org.codehaus.jackson.JsonParser读取,通过org.codehaus.jackson.JsonGenerator写入。 2) Tree Model 通过基于内存的树形结构来描述json数据,和 XML DOM类似。通过org.codehaus.jackson.map.ObjectMapper构建树,树由JsonNode节点组成。 3) Data Binding 基于属性访问或注解的方式将json和POJO对象互相转换, 受JAXB基于注解的处理方式启发。通过org.codehaus.jackson.map.ObjectMapper读写json数据。它包含两种类型: 3.1 Simple Data Binding 用于json和Java Maps, Lists, Strings, Numbers, Booleans and nulls的相互转换。 3.2 Full Data Binding 用于json和Java Bean的相互转换。 下面从使用的角度上比较三种处理方式: Streaming API 执行效率最高,读写速度最快,另外两种方式都基于它实现; Tree Model 是最灵活的; Data Binding 通常是最方便使用的;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值