博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈json以及一些常用的解析
阅读量:4575 次
发布时间:2019-06-08

本文共 2887 字,大约阅读时间需要 9 分钟。

1.什么是JSON?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。

JSON的优点:

1、基于纯文本,跨平台传递极其简单;

2、Javascript原生支持,后台语言几乎全部支持;

3、轻量级数据格式,占用字符数量极少,特别适合互联网传递;

4、可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进之后还是很容易识别的;

5、容易编写和解析,当然前提是你要知道数据结构;

JSON的缺点当然也有,但在作者看来实在是无关紧要的东西,所以不再单独说明。

 

JSON的格式或者叫规则:

JSON能够以非常简单的方式来描述数据结构,XML能做的它都能做,因此在跨平台方面两者完全不分伯仲。

1、JSON只有两种数据类型描述符,大括号{}和方括号[],其余英文冒号:是映射符,英文逗号,是分隔符,英文双引号""是定义符。

2、大括号{}用来描述一组“不同类型的无序键值对集合”(每个键值对可以理解为OOP的属性描述),方括号[]用来描述一组“相同类型的有序数据集合”(可对应OOP的数组)。

3、上述两种集合中若有多个子项,则通过英文逗号,进行分隔。

4、键值对以英文冒号:进行分隔,并且建议键名都加上英文双引号"",以便于不同语言的解析。

5、JSON内部常用数据类型无非就是字符串、数字、布尔、日期、null 这么几个,字符串必须用双引号引起来,其余的都不用,日期类型比较特殊,这里就不展开讲述了,只是建议如果客户端没有按日期排序功能需求的话,那么把日期时间直接作为字符串传递就好,可以省去很多麻烦。

JSON的示例:

 在JSON中,有两种结构:对象和数组。

    1. 一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间运用 “,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:

{"username":"linezero","articlecount":3,"blogurl":""}

  2. 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。

    例如:

[{"username":"linezero","articlecount":3,"blogurl":"http://www.cnblogs.com/linezero"},{"username":"linezero","articlecount":5,"blogurl":"http://www.cnblogs.com/linezero"}]

2.JSON的解析 

js对JSON的解析:

1 var str = '{"username":"linezero","articlecount":3,"blogurl":"http://www.cnblogs.com/linezero"}';2 3 var data=eval("("+str+")");//转换为json对象4 5 alert (data.username);//会显示出linezero

不过eval解析json有安全隐患!

现在大多数浏览器(IE8及以上,Chrome和Firefox差不多全部)自带原生JSON对象,提供JSON.parse()方法解析JSON,提供JSON.stringify()方法生成JSON,请使用这两个方法!

如果担心parse()对对象抛异常,可以加一个封装函数:

1 JSON.pParse = function(tar) {2     if( typeof(tar) === 'string' ) {3         return JSON.parse(tar);4     } else {5         return tar;6     }7 };

.net对JSON的解析:

 1.在asp.net中的解析

1 //需要引入命名空间 2 //using System.Web.Script.Serialization; 3  4 string userdata="{\"username\":\"linezero\",\"articlecount\":3,\"blogurl\":\"http://www.cnblogs.com/linezero\"}"; 5 JavaScriptSerializer ser = new JavaScriptSerializer(); 6 UserInfo user = ser.Deserialize
(userdata); 7 user.username//这个输出就是linezero 8 9 //创建一个对象类对象里面字段与JSON相同10 public class UserInfo11 {12 public string username;13 public int articlecount;14 public string blogurl;15 }

 

 2.使用JSON.NET

简而言之,这是一个可以用于.NET的Json辅助工具类。它可以将对对象序列化为json字符串。

Json.Net目前的版本是Json.NET 5.0 Release 6 

1 //需要引入命名空间 2 //using Newtonsoft.Json; 3 string userdata = "{\"username\":\"linezero\",\"articlecount\":3,\"blogurl\":\"http://www.cnblogs.com/linezero\"}"; 4 UserInfo user=JsonConvert.DeserializeObject
(userdata);//将json转成UserInfo对象 5 Console.WriteLine(user.username);//输出linezero 6 7 //创建一个对象类对象里面字段与JSON相同 8 public class UserInfo 9 {10 public string username;11 public int articlecount;12 public string blogurl;13 }

以上就是我对JSON的一点认识。欢迎各位大大给一些指点。

如果你觉得本文对你有所帮助,就点下推荐吧。

转载于:https://www.cnblogs.com/linezero/archive/2013/06/08/3125587.html

你可能感兴趣的文章
从0开始整合SSM框架-1.mybatis
查看>>
移位操作的疑问
查看>>
UILabel常用属性小结
查看>>
gitlab 邮件服务器配置
查看>>
Python 循环语句(while, for)
查看>>
深入理解JavaScript原型链
查看>>
LinearGradient类来实现图片的渐变效果
查看>>
Golang关键字—— if/else
查看>>
数据清洗
查看>>
PHP&MySQL(三)——数组
查看>>
各种语法解释及用法
查看>>
UVA 1388 Graveyard
查看>>
Eclipse使用技巧
查看>>
网络请求之get与post异步请求
查看>>
堆和栈的区别
查看>>
清理内存
查看>>
蓝桥杯之装箱问题
查看>>
Spark常用算子详解
查看>>
JAVA_桥接模式
查看>>
C语言 strcpy,memcpy,memmove,memccpy函数
查看>>