今天在投简历的时候两度发现JSON,便做了下了解。
官网地址为:
http://json.org/json-zh.html
关于名词解释,引用下官网的原话:
引用
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
个人理解就是制定了数据格式标准用于数据交换,比如做java web时javascript与java代码中有大量数据交互时。之前有项目中的做法是用特殊分隔符(O(∩_∩)O~),导致代码中大量的字符串拼接拆分操作。
关于JSON的数据格式,官网上有几张大图详细说明,这里先上代码直观理解,是从度娘上借鉴下来的:
{ "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": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]}
引用
JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式
JSON 可以将类似如上所示的对象中表示的一组数据转换为字符串,然后就可以随意传递。感觉就像是某个类的实例中的各个属性赋值,然后就toString()了一下。
java中JSON的使用可以参考官网给的代码,
http://json-lib.sourceforge.net/usage.html,
当然要先引用lib包:
json-lib-2.4-jdk15.jar
commons-lang 2.5(注意不要用3的版本)
commons-beanutils 1.8.0
commons-collections 3.2.1
commons-logging 1.1.1
ezmorph 1.0.6
主要是用 JSONObject.fromObject(XXX)方法来串行化,用JSONObject.toBean()来反串行化。
但.toBean()方法存在两个问题:
1.如果目标bean有个map作为其属性并且map中含有其他的bean时,那个其他的bean就会自动转成动态bean,这时需要该方法的第三个参数来做说明。
2.类似1,如果目标bean有个Collection(List)作为其属性且含有其他的bean时,那个其他的bean就会自动转成动态bean,这时即便用该方法的第三个参数来做说明也没用!!!
貌似使用上有些限制,但非map和Collection的时候用其他bean作为属性是可以转换过来的。而且即便是动态bean也可以使用PropertyUtils的方法来获取属性值。
XMLSerializer.write(JSONObject)方法可以把JSON格式化为xml字符串,用的时候要注意引入JAR包xom-1.2.8.jar。
在高级特性
http://json-lib.sourceforge.net/advanced.html里,主要列举了一些转换时可以进行的设置,都是通过类JsonConfig,而上述的JSONObject.fromObject()和JSONObject.toBean()方法都支持此参数。具体使用待以后用得着再看吧。。。