JSON 模式(Schema)与数据解析
JSON 模式是一种基于 JSON 格式定义 JSON 数据结构的规范
JSON 模式用于描述现有数据格式,干净的人类和机器可读的文档,完整的结构验证,有利于自动化测试,可用于验证客户端提交的数据
JSON 模式验证库目前有好几个验证器可用于不同的编程语言。但是目前最完整和兼容 JSON 模式的验证器是 JSV
JSON 模式示例{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Product", "description": "A product from Acmes catalog", "type": "object", "properties": { "id": { "description": "The unique identifier for a product", "type": "integer" "name": { "description": "Name of the product", "type": "string" "price": { "type": "number", "minimum": 0, "exclusiveMinimum": true "required": ["id", "name", "price"] }
我们来看一下可以用于这一模式中的各种重要关键字:
exclusiveMinimum 如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上大于 "minimum" 的值则实例有效
exclusiveMaximum 如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上小于 "maximum" 的值则实例有效
multipleOf 如果通过这个关键字的值分割实例的结果是一个数字则表示紧靠 "multipleOf" 的数字实例是有效的
JSON 与 XML 对比
JSON 和 XML 都是人类可读的格式并且与语言无关。在现实环境中它们都支持创建,读取和解码。我们可以基于以下因素来比较 JSON 和 XML:
XML 比 JSON 冗余,因此对我们来说编写 JSON 会更快
XML 被用来描述结构化数据,不包含数组;而 JSON 包含数组。
可以使用 JavaScript 的 eval 方法解析 JSON。当针对 JSON 应用这个方法时,eval 返回描述的对象。
JSON 示例
{ "company": Volkswagen, "name": "Vento", "price": 800000 }
XML 示例
car company Volkswagen /company name Vento /name price 800000 /price /carJSON 数据解析 JSON 数据解析的方法
JSON是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
JSON的规则很简单: 对象是一个无序的“‘名称/值对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值 对”之间使用“,”(逗号)分隔
JSON提供了json.js包,将其引入然后就可以使用object.toJSONString()转换成JSON数据
function showCar() { var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow"); alert(carr.toJSONString()); function Car(make, model, year, color) { this.make = make; this.model = model; this.year = year; this.color = color; }
可以使用eval来转换JSON字符到Object
function myEval() { var str = { "name": "Violet", "occupation": "character" }; var obj = eval(( + str + )); alert(obj.toJSONString()); }
或者使用parseJSON()方法
function myEval() { var str = { "name": "Violet", "occupation": "character" }; var obj = str.parseJSON(); alert(obj.toJSONString()); }JS中json数据的处理 json数据结构(对象和数组)
json对象:var obj = {"name":"xiao","age":12};
json数组:var objArray = [{"name":"xiao","age":12},{"name":"xiao","age":12}];
处理json数据,依赖文件有:jQuery.js 数据传输过程中,json数据是以文本,即字符串格式形式存在;JS语言操作的是JS对象;所以json字符串与JS对象之间的转换是关键;Json字符串:var json_str = {"name":"xiao","age":12};
Json对象:var obj = {"name":"xiao","age":12};
JS对象:Object {name: "xiao", age: 12}
Json字符串—— JS对象,使用方法:obj = JSON.parse(json_str);
obj = jQuery.parseJSON(json_str);
注意:传入畸形json字符串(例如:{name:"xiao",age:12}),会抛出异常;
Json字符串格式,严格格式:{"name":"xiao","age":12}
JS对象—— Json字符串:json_str = JSON. stringify(obj);
eval()是JS原生函数,使用该形式:eval((+{name:"xiao",age:12}+)),并不安全,无法保证类型转换为JS对象
JSON 数据解析JSON格式在web开发中越来越受重视,特别是在使用ajax开发项目的过程中,经常需要将json格式的字符串返回到前端,前端解析成JS对象(JSON )
解析JSON数据的三种方法
eval()函数对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,就是将该字符串放于eval()中执行一次。这种方式也适合以普通javascipt方式获取json对象
function toJson(data){ var json = eval(( + data + )); return json; }
("("+data+")")原因:由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行
例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变
对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利 用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法:
$.getJSON("http://www.phpzixue.cn/",{param:"gaoyusi"},function(data){ //此处返回的data已经是json对象 $.each(data.root,function(idx,item){ if(idx==0){ return true;//同countinue,返回false同break alert("name:"+item.name+",value:"+item.value); });
该方法存在性能和安全方面的问题,不建议使用
使用Function对象来完成它的典型应用就是在JQuery中的AJAX方法下的success等对于返回数据data的解析
function toJson(str){ var data = (new Function("return " + str))(); return data; }
此时的data就是一个json对象了
JSON.parse()方法这种方法只支持IE8/Firefox3.5+/Chrome4/Safari4/Opera10 以上版本,这些浏览器都已经接近W3C标准,默认实现了toJSON方法
function toJson(str){ return JSON.parse(str); }JS对象与JSON格式数据相互转换 JS对象转换成为JSON
流程:读取前端页面数据,组装成为JS对象,并通过jQuery的$.post()方法传递给python。
处理:引用一个json2.js文件,调用JSON.stringify()方法。例如:
var data = new Object(); var json_data = JSON.stringify(data);
读取:python这里就很简单了,用dict_data = json.loads(json_data)就OK了
JSON转换成为JS流程:python组装一个dict数据并转成JSON格式传递给前端,或者前端通过jQuery的$.getJSON()方法直接读取这个JSON格式的数据
处理:用jQuery的一个方法$.parseJSON()将JSON格式的数据转成JS对象。例如:
var json_data = $.getJSON(); var data = $.parseJSON(json_data);
读取:JS对像的操作就不必多说了
这里,python要把字典转换成JSON格式数据,用json.dumps()这个方法就行了
相关文章
- 设计模式-备忘录模式
- RabbitMQ的5种模式
- HM编码器代码阅读(14)——帧间预測之AMVP模式(二)predInterSearch函数
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
- 基于基因数据的神经网络模式分类研究
- 60jqGrid - 树模式添加数据
- “大数据”模式的法律风险
- 帝国理工创新领袖:数据驱动创新的五种模式
- CAAI演讲实录|微软邓力:驱动大数据人工智能多种应用的三类深度学习模式
- Java 单例模式
- zeromq简介及各个通讯模式实例详解(附java实现)
- PostgreSQL和Kingbase中设置当前模式
- PHP 设计模式 笔记与总结(9)数据对象映射模式
- PHP 5大运行模式
- Singleton模式(单例模式) 饿汉式和懒汉式
- Excel 数据透视表教程大全之 02 添加字段、设置数据格式应用货币模式、按值进行排序(教程含样本数据)
- 大数据架构和模式(一)——大数据分类和架构简介
- model.train方法的dataset_sink_mode参数设置为False时以step作为单位打印数据——(只在mode=context.GRAPH_MODE下成立,在mode=context.PYNATIVE_MODE模式下不成立)
- 浅析了解实现微前端的3种模式(自组织Nginx路由分发、基座容器模式、模块加载模式)、webpack5 Module Federation(模块联邦)是什么、基于模块联邦实现微前端的方案学习
- 中国联通赵越:打通数据源到数据应用,大平台模式发展大数据
- 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
- Django:CBV模式的数据权限实现
- 做好大数据模式下基层社会治理
- mysql双主gtid模式,在有数据情况下
- 大数据催生决策新模式 未来将改变更多
- 大数据时代的上海商业新模式
- 【大数据Hadoop】HDFS-HA模式下ZKFC(DFSZKFailoverController)高可用主备切换机制
- 数据访问对象模式
- 数据访问对象模式
- JSON和GSON操作json数据