笔记37----json和fastjson
来源:互联网 发布:数据分析师职业收入 编辑:程序博客网 时间:2024/05/16 14:16
1、json概念
一种轻量级的数据交换格式,适用于多种平台。在Android中,被广泛用于客户端和服务器通信,在网络数据传输和解析时非常方便。
2、与xml比较
1)json和xml的数据可读性差不多。2)json和xml同样拥有丰富的解析手段。3)json相对于xml来讲,数据体积更小。4)json与javascript的交互更方便。5)json对数据的描述性比xml差。6)json的速度要远远快于xml。
2、json使用
1)json语法
语法规则:花括号保存对象,方括号保存数组,数据保存在名值对中,数据由逗号分隔。
记好语法,都不是问题。举几个例子:
{"firstName":"Brett"}--------对象(仅有一个数据)
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}----------对象(有多个数据)
[ { "precision": "zip", "Latitude": 37.7668, "Longitude": -122.3959, "Address": "", "City": "SAN FRANCISCO", "State": "CA", "Zip": "94107", "Country": "US" },
{ "precision": "zip", "Latitude": 37.371991, "Longitude": -122.026020, "Address": "", "City": "SUNNYVALE", "State": "CA", "Zip": "94085", "Country": "US" }]
-----------------数组(数组元素是包含多个数据的对象)
{"programmers":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
],"authors":[
{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},
{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},
{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}
],"musicians":[
{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},
{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}
]}---------对象(对象值是数组)2)json结构
json基础结构只有两种:对象和数组
3)常用的类
①JSONObject:json对象;②JSONArray:json数组;③JSONStringer:这个类帮助快速和便捷的创建JSONtext。最大优点在于可以减少由于格式的错误导致程序异常。④JSONTokener:这个是系统为JSONObject和JSONArray构造器解析JSON source string的类,它可以从source string中提取数值信息。⑤JSONException
4、开源框架fastjson
1)、了解
解析速度最快,支持各种JDK类型,包括基本类型、JavaBean、Collection、Map、Enum、泛型等。
2)、序列化和反序列化
一个json库涉及的最基本功能就是序列化和反序列化。可以使用com.alibaba.fastjson.JSON这个类进行序列化和反序列化。
3)、序列化就是把JavaBean对象转化为JSON格式的文本。
1)基本序列化:
Object o = ...;
String text = JSON.toJSONString(o);
2)日期格式化:
fastjson直接支持日期类型数据的格式化,包括java.util.Date、java.sql.Date、java.sql.Timestamp、java.sql.Time。缺省情况下,fastjson将Date类型序列化为long,这个使得序列化和反序列化的过程不会导致时区问题。如:
long
millis = 1324138987429L;
Date date =
new
Date(millis);
System.out.println(JSON.toJSONString(date));输出结果是1324138987429
JSON.toJSONStringWithDateFormat(date,
"yyyy-MM-dd HH:mm:ss.SSS"
);输出的结果为:"2011-12-18 00:23:07.429"
3)使用WriteClassName特性:
fastjson支持序列化时写入类型信息,从而使得反序列化时不至于类型信息丢失。例如:
Color color = Color.RED;
String text = JSON.toJSONString(color, SerializerFeature.WriteClassName);
System.out.println(text);
输出结果:{
"@type"
:
"java.awt.Color"
,
"r"
:
255
,
"g"
:
0
,
"b"
:
0
,
"alpha"
:
255
}
由于序列化带了类型信息,使得反序列化时能够自动进行类型识别,例如:
String text = ...;
// {"@type":"java.awt.Color","r":255,"g":0,"b":0,"alpha":255}
Color color = (Color) JSON.parse(text);
4)、反序列化就是把JSON格式的文本转化为JavaBean对象
4)、反序列化就是把JSON格式的文本转化为JavaBean对象
1)指定class信息反序列化
通过指定类型信息,可以很方便的将"JSON文本"反序列化为"Java Bean"对象,例如:
String text = ...;
// {"r":255,"g":0,"b":0,"alpha":255}
Color color = JSON.parseObject(text, Color.
class
);
2)类型集合的反序列化
String text = ...;
// [{ ... }, { ... }]
List<User> users = JSON.parseArray(text, User.
class
);
如果你需要返回一个带泛型的对象,例如List<User>、Map<String, User>,你可以使用TypeReference来传入类型信息。
String text = ...;
// {"name":{"name":"ljw",age:18}}
Map<String, User> userMap = JSON.parseObject(text,
String text = ...;
// {"name":{"name":"ljw",age:18}}
Map<String, User> userMap = JSON.parseObject(text,
new
TypeReference<Map<String, User>>() {});
<Map<String, User>>(){});
Map map=new HashMap<String, User>();
map=JSON.parseObject(text, map.getClass());
5、解析注意事项
从服务器得到的数据一般为{"body":值},此时要解析
1)当值为100、102之类的数字时,不能通过强制转换将返回值转为String型,但可以通过在值后+""来转为字符串。
2)当值为null时,注意此时只是表示body的值为字符串"null",而非我们常用的null。注意区分"null"和null
3)解析举例:看下图json数据
要解析这种数据,先看格式:都是键值对的json对象。区别是SpecName1和SpecName2的类型是String,GoodsSpecs的类型是List<对象>。
首先将0、1、2声明成类,如SubTClass。
然后再声明一个类,如
class TClass{
private String SpecName1, SpecName2;
private List<SubTClass> GoodsSpecs;
get和set方法
}
然后直接解析就OK了。
- 笔记37----json和fastjson
- Json和FastJson对比
- Json,Gson,FastJson解析笔记
- Json,Gson,FastJson解析笔记
- JSON解析学习笔记(json、gson、fastjson)
- json之Gson和FastJson
- android学习笔记19:FastJson解析json
- Json学习笔记(一)-利用Fastjson将String转换成Map,List和数组
- Json---fastJson
- Json-fastjson
- fastjson生成和解析json数据
- FastJson生成和解析JSON数据
- fastjson生成和解析json数据
- FastJson生成和解析JSON数据
- fastjson生成和解析json数据
- fastJson和jackson转json的区别
- fastjson生成和解析json数据
- json解析库gson和fastjson使用
- Android 对话框中的进度条 ProgressDialog
- 以Settings.APPLICATION_DEVELOPMENT_SETTINGS打开开发者面板出错总结
- NOJ [1126] Bull Math
- day85(流和文件)
- GMail测试经理谈Google如何开展测试
- 笔记37----json和fastjson
- 华为OJ_2129_素数伴侣
- 小细节:void指针一二三
- 云计算的应用
- 如何把Vim变成source insight
- Android超快模拟器(BlueStacks)
- 看看大神的指点
- cvLoadImage函数使用方法
- UI 第一节复习 UIWindow UIView