http://www.tuicool.com/articles/3Y3qm2
背景
之前最早的时候,也见过类似于这样的字符串:
{"list":[ |
很明显,这样的字符,看起来,就像是有一种规律的,但是当时只是知道这是个字符串而已。
后来,渐渐地,了解到,原来这样的字符串,是有特定的格式和规律的,其叫做JSON字符串。
什么是JSON
后来就专门去查了查json是啥。
此处,先引用:
JSON Wiki 中的话:
JSON ( J ava s cript O bject N otation)是一种轻量级的 数据交换语言 ,以文字为基础,且易于让人阅读。尽管JSON是在 Javascript 的一个子集,但JSON是独立于语言的 文本格式 ,并且采用了类似于 C语言 家族的一些习惯。
此处,简单可以理解为:
JSON的简要解释
-
JSON全称是 J ava s cript O bject N otation,很明显,是源于Javascript。此处暂可不深究这方面,知道这点即可。
-
JSON是一种字符串,有一定特定的语法格式的字符串;
-
JSON之所以定义这样的语法格式,目的在于方便数据的交换。即,一些数据,通过JSON这种格式,从一个地方,尤其是网络上,发送,传递到另外一个地方,然后使得接受者,也很容易理解相关的数据。
而具体关于JSON的语法,即规定的怎么写,具体是啥样的格式,不再赘述,只尽量简单的介绍一下:
最最基本的语法是:
JSON的最基本语法
-
对象,即一个变量名,一个值,对应的写法是:{name:value}
-
列表,有多个元素是,写法是:[collection, collection]
余下的,按照正常逻辑理解即可,比如字符串是两个双引号""括起来的,数字是0到9等等。
JSON的例子
wiki中举的例子是:
{ "firstName": "John", "lastName": "Smith", "male": true, "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
通过此例子,也就算很形象的知道了,JSON算是一个结构很清晰的,用于表示数据的一种格式。
JSON的一些注意事项
发送的JSON字符串是紧凑型(无缩进的)
需要说明的是,由于JSON的发明,就是为了用于数据交换,所以,在发送JSON字符串之前,其实都不是你所看到的上面的,格式化,带缩进的那种,都是紧凑型的,字符之间没有空格的,
就像此文最开始所举例的那种的,将这些紧凑的数据,发送给别人。
用格式化工具格式化JSON字符串(为带缩进的)以方便查看
而接受者,作为人类,想要查看数据,能清晰的看懂数据,一般会用一些工具,比如 Notepad++ 中的插件 JSMin ,去格式化,
把最开始我们给出的JSON数据,格式化后的效果为:
程序中是如何处理JSON的
很多程序中,都会遇到JSON字符串,所以就涉及到,如何通过程序处理JSON字符串,比如将JSON字符串,转换为对应的字典类的变量等等。
很明显,当然是可以通过你手动写代码,一点点处理的,但是更明显,效率很低。
而且现实中,的确是,针对不同的语言,已经有了对应的JSON相关库函数,去用于处理JSON字符串了。
对于这些不同语言的,对应的JSON处理的库,人家 JSON官网 中,已经帮你整理好了。你自己去看,学习了解对应的JSON库如何使用的,即可。
其中包括了N种语言的,N个JSON处理相关的库,我就不重复去罗列了,自己去JSON官网 看即可。
此处,只是说说,我所用过的一些JSON的库:
Python语言中自带的处理JSON的库:json
之前折腾过相关的,用Python语言处理JSON字符串的,用的是Python语言内置的Json库,相对还是很好用的。
相关Python中如何处理json的示例代码可参考:
相关的折腾,感兴趣的可参考:
【整理】Python中将(字典,列表等)变量格式化成(漂亮的,树形的,带缩进的,JSON方式的)字符串输出
【经验记录】Python中json.loads的时候出错->要注意要解码的Json字符的编码
另外,有时候,遇到一些特殊的情况,也是可以借助 BeautifulSoup库 去帮忙处理的:
【已解决】用BeautifulSoup解析Html格式的Json字符串
C#中处理JSON字符串
之前也折腾过C#中处理JSON字符串的。
只不过当时发现C#内置没有相关的JSON的库,还需要再安装第三方的JSON库,觉得太麻烦,所以暂且放弃了:
【未解决】C#中从Json.Net解析后的Json中获得某个列表类型的变量
就暂且先用正则表达式的类Regex去手动处理,提取所需的内容了。
当然,如果有人有需求,还是值得去安装第三方JSON库,去处理Json字符串的。
后来的一些折腾,C#中,已经可以很好的处理JSON字符串了。
只是还是需要依赖于.NET 3.5+中的JavaScriptSerializer才行。