Json学习(二)阿里巴巴如何解析Json

今天来说一下阿里巴巴推出的Json处理工具:fastjson

由于使用独特的算法,fastjson对Json的解析是最快的,超过其他任何Json Parser,包括JackJson,除了解析速度快之外,还有很多优点,总结如下:

1.支持各种基本类型,JavaBean,集合,Map,枚举Enum,泛型,甚至是日期

2.可以直接跑在JDK上(JDK1.5版本以上)

3.开源(还有比开源分享更值得令人尊敬的吗)

接下来尝试一下fastjson如何解析Json

 

首先是和实体类之间的转换,创建一个实体类对象,并为三个字段设值,然后解析为Json对象

		student=new StudentInfo();
	        student.setAddress("苏州");
	        student.setAge(15);
	        student.setName("zhansan");        
		json=(JSONObject) JSON.toJSON(student);
		System.out.println(json);

输出结果为:

{"name":"zhansan","address":"苏州","age":15}

此时可在json对象中插入一条新数据,这条数据的键key在实体对象中存在对应字段,然后再讲json对象解析为实体类

		json.put("ingore", "something");
		StudentInfo student1=JSONObject.toJavaObject(json, StudentInfo.class);
		System.out.println(student1.getIngore());

测试一下字段ingore,结果可正常输出:something

接着来遍历json

		for (Entry<String,Object> entry : json.entrySet()) {
			System.out.println("键时:"+entry.getKey()+"   值是:"+entry.getValue());
		}

输出结果:
 

键时:name   值是:zhansan
键时:birth   值是:null
键时:address   值是:苏州
键时:ingore   值是:something
键时:age   值是:15.0
键时:likes   值是:null

然后是集合list和Json的转换,在遍历json时,将每个entry对象都存在list中,再将list解析为JSONArray对象

                for (Entry<String,Object> entry : json.entrySet()) {
			System.out.println("键时:"+entry.getKey()+"   值是:"+entry.getValue());
			list.add(entry);
		}
		
		//json和集合之间的转化(可以是各种集合,比如map,list,set)
		jsonArray=(JSONArray) JSONArray.toJSON(list);
		System.out.println(jsonArray);

输出结果:

[{"value":"zhansan","key":"name"},{"key":"birth"},{"value":"苏州","key":"address"},{"value":"something","key":"ingore"},{"value":15,"key":"age"},{"key":"likes"}]

看起来不太方便,使用谷歌插件JSON-handle处理一下:
 

[
    {
        "value": "zhansan",
        "key": "name"
    },
    {
        "key": "birth"
    },
    {
        "value": "苏州",
        "key": "address"
    },
    {
        "value": "something",
        "key": "ingore"
    },
    {
        "value": 15,
        "key": "age"
    },
    {
        "key": "likes"
    }
]

最后看一下日期的解析

                Object date=new Date();
		String dateStr=JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss");
		System.out.println(dateStr);

输出:

"2018-09-04 22:22:08"

事实上json的解析方法远不止这些(看下面),大家可以根据场景需求选取合适的方法

在这些方法中,有些方法很尤为重要,在这里说一种经常使用的方法,可以将字符串解析为任意一种形式(前提是可以转换)比如,转换为列表list

                String string="['name','lisi','address','suzhou']";
		list=JSON.parseObject(string, new TypeReference<List<Object>>(){});
		System.out.println(list);	

输出结果为:

[name, lisi, address, suzhou]

new TypeReference<List<Object>>(){}可以自定义解析成为什么类型,但是前提是字符串是可以解析为定义的类型,比如这个字符串"['name','lisi','address','suzhou']"无法解析为map,因为map是键值对类型,当前字符串无键值对应关系,自然会报错

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值