JSON 的全称是JavaScript Object Notation,能够翻译为 JavaScript 对象表示法,即将一个 Object 以文本的方式给记录下来。javascript
根据 ECMA-404 标准:php
JSON is a text format that facilitates structured data interchange between all programming languages.前端
因此 JSON 是一种文本格式,它能用于在不一样编程语言中交换结构化数据。JSON 是存储和交换文本信息的语法,在不少状况下能够用来描述特定数据结构的实例。java
JSON入门mysql
JSON有两种表示结构,对象和数组。jquery
对象是一个无序的“‘名称/值’对”集合。一个对象以{(左括号)开始,}(右括号)结束。每一个“名称”后跟一个:(冒号);“‘名称/值’ 对”之间使用,(逗号)分隔。ajax
数组是值(value)的有序集合。一个数组以[(左中括号)开始,](右中括号)结束。值之间使用,(逗号)分隔。sql
JSON(JavaScript Object Notation)仅仅是一种数据格式(或者叫数据形式)。数据格式其实就是一种规范,按照这种规范来存诸和交换数据。就好像 XML 格式同样。JSON 文本格式在语法上与建立 JavaScript 对象的代码相同,但本质是不一样的。json
JSON 和 JavaScript 确实存在渊源,JSON 自己的意思就是 JavaScript 对象表示法(JavaScript Object Notation),能够说这种数据格式是从 JavaScript 对象中演变出来的。JSON 语法是 JavaScript 对象表示法语法的子集。
JSON 格式的数据,主要是为了跨平台交流数据用的。JSON 独立于语言和平台,JSON 解析器和 JSON 库支持许多不一样的编程语言。
我尝试复制一些JavaScript对象,而后将它们发送到一个基于JSON的书签站点。可是它不能工做,为何?
服务器返回的错误信息是Unexpected token n(服务器使用NodeJS和Express框架搭建),这意味着上面的JavaScript对象不是合法的JSON。
深刻理解JavaScript系列11:根本没有“JSON对象”这回事
我想给你们澄清一下一个很是广泛的误解,我认为不少JavaScript开发人员都错误地把JavaScript对象字面量(Object Literals)称为JSON对象(JSON Objects),由于他的语法和JSON规范里描述的同样,可是该规范里也明确地说了JSON只是一个数据交换语言,只有咱们将之用在string上下文的时候它才叫JSON。
对象字面量不是JSON对象,可是有真正的JSON对象。可是二者彻底不同概念,在现代的浏览器里JSON对象已经被原生的内置对象了,目前有2个静态方法:JSON.parse()用来将JSON字符串反序列化成对象,JSON.stringify()用来将对象序列化成JSON字符串。
JSON:若是你愿意一层一层剥开个人心,你会发现...这里水很深——深刻理解JSON
欢迎进入本次“深挖JSON之旅”,下文将从如下几个方面去理解JSON:
首先是对“JSON是一种轻量的数据交换格式”的理解;
而后来看常常被混为一谈的JSON和JS对象的区别;
最后咱们再来看JS中这几个JSON相关函数具体的执行细节。
JSON.stringify()
用于把一个JSON对象(恩,javascript中万物皆对象),转化为一个字符串。
JSON.parse()
只拥有两个参数,第一个就是把这个字符串转换为JSON对象,第二个就是筛选对象。
在没有统一标准的状况下,一个系统对接多个外部系统每每会遇到请求接口响应数据异构的状况,有可能返回的是XML,也有可能返回JSON。除了返回类型不一样,内容结构也不尽相同。
若是在咱们系统中为每种格式的内容针对处理显然是不合理的,上面的内容中咱们只是关心三种信息,分别是业务ID、状态值和描述信息,那么可不能够抽象这三种信息,得到这些信息后再进行业务逻辑处理。
JSON 解析器从本质上来讲就是根据 JSON 文法规则建立的状态机,输入是一个 JSON 字符串,输出是一个 JSON 对象。通常来讲,解析过程包括词法分析和语法分析两个阶段。
词法分析解析出 Token 序列后,接下来要进行语法分析。语法分析的目的是根据 JSON 文法检查上面 Token 序列所构成的 JSON 结构是否合法。
前一阵子看到了一个Golang的JSON库go-simplejson,用来封装与解析匿名的JSON,说白了就是用map或者slice等来解析JSON,以为挺好玩,后来有个项目刚好要解析JSON,因而就试了试,不当心看了一眼源代码,发现居然是用的Golang自带的encoding/json库去作的解析,而其自己只是把这个库封装了一层,看起来更好看罢了
因而心想能不能徒手写一个解析器,毕竟写了这么多年代码了,也JSON.parse,JSON.stringify了无数次。捣腾了两天,终于成了,测试了一下,性能比自带的库要高不少,速度基本上在1.6到7倍之间(视JSON串的大小和结构而定),因此决定写这篇文章分享一下思路。
JSON字符串的验证比想象中的要简单不少,能够说是至关的简单,这得益于在官网上已经将各个状态的扭转、格式类型和组成图给你画好了,只要代码没写错,照着图把各个部分的验证写出来就实现了。
在写完后,我用fastjson的issue859.json测了一下性能,和调用Go的json库或其它三方json库相比,这个实现的性能要高出30%左右,所以若是有需求只验证不解析的,花点时间手撸一个验证器仍是很划算的。
开发过程当中常常碰到要把前端的json格式的数据传递到后端php,php作一些业务处理后把数据存到mysql,而后,php再从mysql中取出数据返回到前端。虽然这是一个再基础不过的处理过程,但仍是有很多问题须要认真研究。下面从几个环节看看可能出现的各类问题。
今天在处理将数组转为json 字符串后,而后获取到解析时,出现解析的json字符串为空的现象,首先看了下,个人json转换脚本以前没有任何输出,但仍是出现json转化乱码,后来查了下,原来是脚本编码格式的问题。
场景:某项目客户反馈,输出的结果 JSON 中有个要求为对象的数据字段,在某些状况下返回的是 [] 而不是 {};数据由公司其余部门提供,查看原始数据的时候,没有发现任何问题;后来由于要加入某些预处理,在获取到其余部门的 JSON 数据以后进行解码并对某个字段进行处理;然而,在处理完以后再次使用 JSON 输出,发现结果已经不是咱们想要的了。
通常状况下,获取到一段json内容,直接json_decode($content, true)就转成array来用了,很方便。
可是,若是给你提供json内容的接口出了点问题,给的json不标准或是干脆有错误,那就要想办法来找出问题了。
JavaScript JSON——“语法、解析与序列化”的注意要点
JSON能够表示一下三种类型的值:
简单值:使用与js相同的语法能够在json中表示字符串、数值、布尔值和null。可是json不支持js的undefined。
对象:对象做为一种复杂的数据类型,表示的是一组有序的键值对。每一个键值对的值能够是简单值,也能够是复杂数据类型的值
数组:数组也是一种复杂数据类型,表示一组有有序的的值列表,能够经过数值索引来访问其中的值。数组的值也能够是任意类型,简单值,对象,数组都可。
json不支持变量,函数,对象实例,它就是一种表示结构化数据的格式。
相信不少人用php搭后台时候,当ajax用于交互时候,因为字符都被urf-8处理,因此用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 相似”u*”的格式, 并且还会在必定程度上增长传输的数据量。
总结几种解决方法:
本身构造支持中文的 json_encode
运用preg_replace替换u**为中文
5.4版本后的直接处理
先描述一下需求情景:
有一个生成节日贺卡的页面,a页面最后部分用来填写用户名和贺卡内容,点击提交按钮跳转到贺卡页面b,b页面显示的就是a页面填写的内容和用户名。(a页面和b页面是没有跨域的...)
一开始我只想到用ajax提交数据来实现,不过一想,是直接提交到b页面吗?一时之间,我也不知道该如何进行页面跳转之间的数据传递。百度许久,终于看到
window.name
这个方法。
介绍两大神器!——使用json-server和faker.js模拟REST API
今天发现了一个神器——json-server!在他的帮助下能够在很短的时间内搭建一个Rest API, 而后就可让前端在不依赖后端的状况下进行开发啦!
简单来讲,JSON-Server是一个Node模块,运行Express服务器,你能够指定一个json文件做为api的数据源。
Jsoniter 0.9.8 发布: JSON 性能对标 Protobuf
Jsoniter 是一款快且灵活的 JSON 解析器,同时提供 Java 和 Go 两个版本。
zTree -- jQuery 树插件 构造treeNode JSON 数据对象
zTree 是一个依靠 jQuery 实现的多功能 “树插件”。
在大型项目中,每每须要不一样的用户看到不一样的目录,不一样的地区显示不一样的目录等等,面对这些庞大的数据,须要生成不一样结构的树目录,你不能一个一个定义这些配置来知足那么多数据需求,这就须要异步加载子节点的的父节点,经过构造treeNode的 JSON 数据对象方法来实现,若是你不嫌我啰嗦,接下来会给你们讲述这个方法。
包括:
Markdown文件转换成静态页面预览
在预览源代码文件,高亮代码
格式化预览JSON文件
显示图像大小和分辨率
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种建立交互式网页应用的网页开发技术。
AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)
AJAX 是一种用于建立快速动态网页的技术
经过在后台与服务器进行少许数据交换
AJAX可使网页实现异步更新。这意味着能够在不从新加载整个网页的状况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)若是须要更新内容,必须重载整个网页页面。
JSONP的诞生
首先,由于ajax没法跨域,而后开发者就有所思考
其次,开发者发现,
<script>
标签的src属性是能够跨域的。把跨域服务器写成 调用本地的函数 ,回调数据回来不就行了?json恰好被js支持(object)
调用跨域服务器上动态生成的js格式文件(不论是什么类型的地址,最终生成的返回值都是一段js代码)
这种获取远程数据的方式看起来很是像ajax,但其实并不同。便于客户端使用数据,逐渐造成了一种非正式传输协议,人们把它称做JSONP。
传递一个callback参数给跨域服务端,而后跨域服务端返回数据时会将这个callback参数做为函数名来包裹住json数据便可。
本文按照政治问答题必备套路分为如下3个部分:
为何要跨域?
跨域是什么?
如何实现跨域?
在 WEB 开发中,常常见到诸如 AJAX、JSON、JSONP 这些名词。三者看起来很像,不少同窗尤为是没有系统了解过前端技术体系的同窗,日常只是借助相似 JQuery 这类库封装好的函数使用而已,并不了解其原理。但这三种东西具体是什么,有什么关系和区别却经常说不清楚。
接下来,会简要介绍一下三者的的含义,重点阐述 JSONP 的来源和原理,以及为何 JSONP 不是 AJAX。
总结:
ajax和jsonp这两种技术在调用方式上“看起来”很像,目的也同样,都是请求一个url,而后把服务器返回的数据进行处理,所以jquery和ext等框架都把jsonp做为ajax的一种形式进行了封装;
ajax和jsonp其实本质上是不一样的东西。ajax的核心是经过XMLHttpRequest获取非本页内容,而jsonp的核心则是经过HTTP来动态添加 <script> 标签来调用服务器提供的js脚本。
其实ajax与jsonp的区别不在因而否跨域,ajax经过服务端代理(CORS)同样能够实现跨域,jsonp自己也不排斥同域的数据的获取。
jsonp是一种方式或者说非强制性协议,如同ajax同样,它也不必定非要用json格式来传递数据,若是你愿意,字符串都行,只不过这样不利于用jsonp提供公开服务。
jsonp整个过程当中,本地站点一直处于主动的地位,主动的发送请求,主动的加载远程js.而第三方站点则处于被动的响应。
JSONP与Ajax的关系:
Ajax与JSONP这两种技术看起来很像,目的也同样,都是请求一个url,而后把服务器返回的数据进行处理,所以jQuery等框架都把JSONP做为Ajax的一种形式。
实际上Ajax与JSONP有着本质上的不一样。Ajax的核心是经过XMLHttpRequest获取数据,而JSONP的核心则是动态添加<script>标签来调用服务器提供的js文件。
Ajax与JSONP的区别也不在因而否跨域,Ajax经过服务端代理也能够跨域,JSONP也可获取同源数据。
本期完
:)