Js, Java对象与 Json 之间的相互转换

JSON+Jackson

JSON

jar包:

commons-beanutils-1.8.0.jar
commons-collections-3.2.jar
commons-lang-2.3.jar
commons-logging.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar

pojo类:

public class Province(){
    private int pid;
  	private String pname;
  	get和set方法...
    toString方法...
}
Java对象转化为字符串
public void testToString(){
    Province pro=new Province();
    pro.setPid(1);
    pro.setPname("北京");

    //创建json对象---已经实现了转换
    JSONObject js=JSONObject.fromObject(pro);
    System.out.println(js);
}
Json字符串转换为Java对象
public void testToObject(){
		String str="{\"pid\":1,\"pname\":\"北京\"}";
		
		//将str字符串转为JSONObject类型
		JSONObject js=JSONObject.fromObject(str);
		System.out.println(js);
		//将json字符串转换为对象
		Province pro=(Province) JSONObject.toBean(js, Province.class); 
		System.out.println(pro.getPid()+","+pro.getPname());
	}
List集合转换为Json字符串
public void testListToString(){
    Province pro1=new Province();
    pro1.setPid(1);
    pro1.setPname("北京");
    Province pro2=new Province();
    pro2.setPid(2);
    pro2.setPname("上海");

    List<Province>pros=new ArrayList<>();
    pros.add(pro2);
    pros.add(pro1);

    //将list集合转换为json
    JSONArray js=JSONArray.fromObject(pros);
    System.out.println(js);
}
Json字符串转换为List集合
public void testStringToList(){
    String str="[{\"pid\":2,\"pname\":\"上海\"},{\"pid\":1,\"pname\":\"北京\"}]";

    JSONArray js=JSONArray.fromObject(str);

    // 两种方式:1.转为list集合
    //List<Province>pros=(List<Province>) JSONArray.toCollection(js, Province.class);

    // 2.转为数组
    Province[]pros=(Province[]) JSONArray.toArray(js, Province.class);
    for(Province pro:pros)
        System.out.println(pro.getPid()+","+pro.getPname());
}
Map集合转换为Json字符串

public void testMapToString(){
    Province pro1=new Province();
    pro1.setPid(1);
    pro1.setPname("北京");
    Province pro2=new Province();
    pro2.setPid(2);
    pro2.setPname("上海");

    Map<String,Province>pm=new HashMap<>();
    pm.put("pro1", pro1);
    pm.put("pro2", pro2);

    JSONArray js=JSONArray.fromObject(pm);
    System.out.println(js);

    JSONObject jso=JSONObject.fromObject(pm);
    System.out.println(jso);
}
Json字符串转换为Map集合
public void testStringToMap() {
    String str = "{\"pro1\":{\"pid\":1,\"pname\":\"北京\"},\"pro2\":{\"pid\":2,\"pname\":\"上海\"}}";
    Map<String, Province> pm = new HashMap<>();

    JSONObject js = JSONObject.fromObject(str);
    Set<String> keys = js.keySet();
    for (String key : keys) {
        if (key != null) {
            Object obj = js.get(key);
            Province pro = (Province) JSONObject.toBean(JSONObject.fromObject(obj), Province.class);
            pm.put(key, pro);
        }
    }

    Province p = pm.get("pro1");
    System.out.println(p.getPid() + "," + p.getPname());
}

Jackson

jar包:

jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar

pojo类:

public class Province(){
    private int pid;
  	private String pname;
  	get和set方法...
    toString方法...
}
方法
  • 类或集合 转 字符串:writeValueAsString(pro)

  • 字符串转 类或集合:readValue(str, Province.class)

类转字符串
public void testObjectToString() throws IOException {
    Province pro = new Province();
    pro.setPid(1);
    pro.setPname("北京");

    //创建实现转换的对象
    ObjectMapper mapper = new ObjectMapper();
    String str= mapper.writeValueAsString(pro);
    System.out.println(str);
}
字符串转类
public void testStringToObject() throws IOException {
    String str = "{\"pid\":1,\"pname\":\"北京\"}";

    ObjectMapper mapper = new ObjectMapper();

    //将json字符串解析为一个Java对象
    Province pro = mapper.readValue(str, Province.class);
    System.out.println(pro.toString());
}
集合转字符串
public void testListToString() throws IOException {
    Province pro1 = new Province();
    pro1.setPid(1);
    pro1.setPname("北京");

    Province pro2 = new Province();
    pro2.setPid(2);
    pro2.setPname("深圳");

    List<Province> pros = new ArrayList<>();
    pros.add(pro1);
    pros.add(pro2);

    ObjectMapper mapper = new ObjectMapper();
    String str = mapper.writeValueAsString(pros);
    System.out.println(str);
}
字符串转化为集合
  • 转为List 集合:

    public void testStringToList() throws IOException {
            String str = "[{\"pid\":2,\"pname\":\"深圳\"},{\"pid\":1,\"pname\":\"北京\"}]";
    
            ObjectMapper mapper = new ObjectMapper();
    
    //        List<Province> list = mapper.readValue(str, List.class);
      //只用这个方法无法指定List集合中的元素的类的类型,会抛出类型转化异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.k.pojo.Province
    
      
            //为了解决无法指定集合内部元素的类的类类型的问题:用getTypeFactory()获得一个工厂对象,然后用这个工厂对象的constructParametricType(集合类型,元素类型) 方法,将集合类型和元素类型封装到一起。
            List<Province> pros = mapper.readValue(str, mapper.getTypeFactory().constructParametricType(List.class, Province.class));
    
            for (Province pro :pros) {
                System.out.println(pro.toString());
            }
        }
    

  • 转为Map 集合:

    public void testStringToMap() throws IOException {
        String str = "{\"pro1\":{\"pid\":1,\"pname\":\"北京\"},\"pro2\":{\"pid\":2,\"pname\":\"深圳\"}}";
    
        ObjectMapper mapper = new ObjectMapper();
        Map<String,Province>pros = mapper.readValue(str, new TypeReference<Map<String, Province>>() {
        });
        //TypeReference类: TypeReference<集合,value元素类型>(){}
    
        Iterator<String> it = pros.keySet().iterator();
        while (it.hasNext()) {
            String key = it.next();
            System.out.println(key+","+pros.get(key));
        }
    }
    

JSP中的解析(JS中)

导入的外部js:

<script type="text/javascript" src="js/json.js"></script>

方法:

  • 转换为Json字符串:JSON.stringify()
  • Json字符串解析出属性和值:
    1. 原生js:eval("("+jsonStr+")")
    2. parse方法:JSON.parse(jsonStr)
对象转为JSON字符串
<script type="text/javascript" src="${pageContext.request.contextPath}/js/json.js"></script>
//${pageContext.request.contextPath}:EL表达式输出项目路径
<%--将对象转为一个json字符串--%>
<script type="text/javascript">
    function Province(pid, pname) {
    this.pid = pid;
    this.pname= pname;
}

//创建一个js对象
var pro = new Province(1,"北京");

//将对象转换为一个json字符串
var str = JSON.stringify(pro);

//parse 方法的作用是将json字符串中的属性和值解析出来(没有解析出对象的类类型)
var pro1 = JSON.parse(str);
alert(pro1.pid+","+pro1.pname);    
</script>

jar 包
网盘 提取码:ap36
csdn资源 最低都要设置1积分,我也没办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值