背景

之前最早的时候,也见过类似于这样的字符串:

{"list":[          
{"ArticleId":7392749,"BlogId":1158641,"CommentId":2182295,"Content":"偶是来测试评论滴,哈哈","ParentId":0,"PostTime":"2分钟前","Replies":null,"UserName":"crifan","Userface":"http://avatar.csdn.net/E/D/E/3_crifan.jpg"},            
{"ArticleId":7392749,"BlogId":1158641,"CommentId":2182254,"Content":"mark__","ParentId":0,"PostTime":"52分钟前","Replies":null,"UserName":"mars_tl","Userface":"http://avatar.csdn.net/9/3/0/3_mars_tl.jpg"}],"page":{"PageSize":20,"PageIndex":1,"RecordCount":0,"PageCount":0},"fileName":"7392749"}

很明显,这样的字符,看起来,就像是有一种规律的,但是当时只是知道这是个字符串而已。

后来,渐渐地,了解到,原来这样的字符串,是有特定的格式和规律的,其叫做JSON字符串。

什么是JSON

后来就专门去查了查json是啥。

此处,先引用:

JSON Wiki中的话:

JSONJavascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管JSON是在Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。

此处,简单可以理解为:

JSON的简要解释

  • JSON全称是Javascript Object Notation,很明显,是源于Javascript。此处暂可不深究这方面,知道这点即可。

  • JSON是一种字符串,有一定特定的语法格式的字符串;

  • JSON之所以定义这样的语法格式,目的在于方便数据的交换。即,一些数据,通过JSON这种格式,从一个地方,尤其是网络上,发送,传递到另外一个地方,然后使得接受者,也很容易理解相关的数据。

而具体关于JSON的语法,即规定的怎么写,具体是啥样的格式,不再赘述,只尽量简单的介绍一下:

最最基本的语法是:

JSON的最基本语法

  • 对象,即一个变量名,一个值,对应的写法是:{name:value}

  • 列表,有多个元素是,写法是:[collection, collection]

余下的,按照正常逻辑理解即可,比如字符串是两个双引号""括起来的,数字是0到9等等。

JSON的例子

wiki中举的例子是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
     "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字符串转换为变量

【已解决】C#中解析Json字符串

【未解决】C#中从Json.Net解析后的Json中获得某个列表类型的变量

就暂且先用正则表达式的类Regex去手动处理,提取所需的内容了。

当然,如果有人有需求,还是值得去安装第三方JSON库,去处理Json字符串的。

 

后来的一些折腾,C#中,已经可以很好的处理JSON字符串了。

只是还是需要依赖于.NET 3.5+中的JavaScriptSerializer才行。

详见:

【已解决】C#中,Json字符串转字典,并获得对应的Dictionary的键值

json入门(二)的更多相关文章

  1. 微服务(入门二):netcore通过consul注册服务

    基础准备 1.创建asp.net core Web 应用程序选择Api 2.appsettings.json 配置consul服务器地址,以及本机ip和端口号信息 { "Logging&qu ...

  2. JSON入门指南--客户端处理JSON

    在传统的Web开发过程中,前端工程师或者后台工程师会在页面上写后台的相关代码,比如在ASP.NET MVC4里面写如下代码: @Html.TextBoxFor(m => m.UserName, ...

  3. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  4. Swift语法基础入门二(数组, 字典, 字符串)

    Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...

  5. Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

    原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...

  6. DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表

    原文:DevExpress XtraReports 入门二 创建 data-aware(数据感知) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的, ...

  7. css入门二-常用样式

    css入门二-常用样式总结 基本标签样式 背景色background-color 高度height; 宽度width; 边框对齐以及详细设定举例 width/*宽度*/: 80%; height/*高 ...

  8. IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)

    1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...

  9. 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...

  10. 2.Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

随机推荐

  1. IsNullOrEmpty与IsNullOrWhiteSpace区别

    IsNullOrEmpty public static bool IsNullOrEmpty(String value) { return (value == null || value.Length ...

  2. 【编程之美】CPU

    今天开始看编程之美 .第一个问题是CPU的使用率控制,微软的问题果然高大上,我一看就傻了,啥也不知道.没追求直接看答案试了一下.发现自己电脑太好了,4核8线程,程序乱飘.加了一个进程绑定,可以控制一个 ...

  3. IOS-Gesture(手势识别)

    手势识别——Gesture Recognizer •iOS3.2版本之后,苹果推出了手势识别(Gesture Recognizer),其目的是: –简化开发者的开发难度 –统一用户体验 • •iOS目 ...

  4. .NET后台如何获取前台HMTL控件的值

    很多时候我们需要HTML控件,感觉比服务器控件更加简介,清爽,那么如何获取HMTL控件的值呢,请看下面例子: 前台页面代码: <input id="Text1" type=& ...

  5. VB.NET 注册表基本操作

    ''' <summary> ''' 注册表设置值 ''' </summary> ''' <param name="strKey"></pa ...

  6. C/C++中调用python文件

    1.将python27安装目录下include.libs文件夹拷贝至Demo程序目录. 2.Demo项目设置包含Python.h.python27.lib); (因为安装python27的时候,pyt ...

  7. ArrayList 和 LinkedList 的区别

    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动 ...

  8. 大数运算(python2)

    偶然又遇到了一道大数题,据说python大数运算好屌,试了一发,果然方便-1 a = int( raw_input() ); //注意这里是按行读入的,即每行只读一个数 b = int( raw_in ...

  9. Swift - LineChart绘制折线图

    LineChart,就使用Core Graphics和QuartzCore框架中的CAShapeLayer绘制.这样执行效率明显比堆砌UIView的方法效率高--占用资源少,执行快. 看看CALaye ...

  10. Java -- String、StringBuffer、StringBuilder

    原文:http://blog.csdn.net/kingzone_2008/article/details/9220691 String:不可变. StringBuffer(JDK1.0):可变,线程 ...