文档章节

JSON使用场景和基本语法用法

Menthol
 Menthol
发布于 2017/08/04 13:50
字数 1466
阅读 73
收藏 1

你要知道

与 XML 相同之处

  • JSON 是纯文本
  • JSON 具有"自我描述性"(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

与 XML 不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

为什么使用 JSON?

对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

使用 XML

  • 读取 XML 文档
  • 使用 XML DOM 来循环遍历文档
  • 读取值并存储在变量中

使用 JSON

  • 读取 JSON 字符串
  • 用 eval() 处理 JSON 字符串

json可以以数组传递,也可以以对象传递,,返回的json格式,是一个数组json,然后里面含有对象,这是json常见的格式。后来经过php的处理,结构又发生了变化,最外层是一个对象了,里面是数组和对象。

在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

JSON字符串:

var str1 = '{ "name": "haorooms", "sex": "man" }';

JSON对象:

var str2 = { "name": "haorooms", "sex": "man" };

一、JSON字符串转换为JSON对象

要运用上面的str1,必须运用下面的要领先转化为JSON对象(这一点在ajax返回的时候,经常遇到!):

//由JSON字符串转换为JSON对象

var obj = eval('(' + str + ')');

或者

var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

或者

var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

然后,就可以这样读取:

Alert(obj.name);

Alert(obj.sex);

特别注意:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会有疑问(抛出语法异常)。

二、可以运用 toJSONString()或者全局要领 JSON.stringify()将JSON对象转化为JSON字符串。

例如:

var last=obj.toJSONString(); //将JSON对象转化为JSON字符

或者

var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

alert(last);

上面的多个要领中,除了eval()函数是js自带的之外,其他的多个要领都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()要领,则说明您的json包版本太低。

上面是对javascript的简单总结,部分总结参考网络。但是很多在平时都用的到,特别是json字符转对象的操作

 

使用场景

API接口返回值

Ajax中实现异步加载

 

2,怎样使用json

JSON的基本语法 JSON的四个基本规则:

1、并列的数据之间用逗号(",")分割。

2、映射用冒号(":")表示

3、并列的数据集合(数组)用方括号("[]")表示。

4、映射的集合(对象)用大括号("{}")表示

 

3,json与其他数据交换格式的区别

XML
标准通用标记语言的子集,非常适合web传输,

xml提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
Serialize
类似JSON PHP的serialize是将变量序列化,返回一个具有变量类型和结构的字符串表达式
Array()
基本数据类型,不能让用于数据传输和交替。

 

4,json优缺点

优点:数据格式比较简单,易于读写,压缩,占用带宽小,网络传输速度快,支持多种语言。
缺点:字符集必须是Unicode 受约束性强
语法过于严谨,必须遵循json语法四个原则。

5,JSON 数据格式和 Serialize 数据格式的异同和使用
 相同点:
        1、都是把其他数据类型转换成一个可以传输的字符串(除了资源类型)
        2、都是结构性数据
 异同点:
        1、Serialize 序列化后的数据格式保存数据原有类型
        2、JSON 数据格式要简洁,相比Serialize 序列化之后的数据格式
 使用场景:
        1、JSON 适合数据量大,不要求保留原有类型的情况
        2、Serialize 适合存储带有加密方式的数据串,防止数据被中途截取,反序列化破解。

在PHP中使用serialize()序列化数据是非常便捷的。serialize()返回一个字符串,此字符串包含了表示数据的字节流。使用serialize()产生的这个字 符串可以存储于任何地方,同时不会丢失其数据类型和结构,这有利于存储或传递PHP的值。
    serialize()可以处理除resource之外的任何类型,甚至可以处理那些包含了指向其自身引用的数组。数组/对象中的引用也将被存储,并且自PHP4版本以后可以同时存储对象的属性和方法(PHP3只能存储对象的属性)。
    但是在使用serialize()的时候一定要注意对其内容先进行addslashes()处理,否则序列化的数据中如果有特殊字符就会导致字符串无法使用unserialize()进行反序列化。

6,php操作json的重要函数

加密:json_encode();

解密:json_deconde();

7,使用json实例详解

一维数组,多维数组,对象到json数据格式的转换,如何解析一个json数据格式

转换json数据格式到对象类型,转换json格式到数组类型(json_decode("",true))。

 

对象转换为json数据时,只转换公有变量,私有变量不转换。

 

部分摘抄: http://www.haorooms.com/post/json_object_json_string

 

© 著作权归作者所有

上一篇: AJAX 笔记
下一篇: php合成图片 摘抄
Menthol
粉丝 1
博文 27
码字总数 33504
作品 0
程序员
私信 提问
C# JSON格式数据高级用法

JSON简介 JSON(全称为JavaScript ObjectNotation) 是一种轻量级的数据交换格式。它是基于JavaScript语法标准的一个子集。JSON采用完全独立于语言的文本格式,可以很容易在各种网络、平台和程...

梦想PHOTO
2018/11/19
0
0
Zsh 开发指南(第十六篇 alias 和 eval 的用法)

导读 alias(别名)在 shell 中是非常常用的,它主要用于给命令起别名,简化输入。但主要用于交互场景,在脚本中基本用不到。eval 是一个非常强大的命令,它的功能是将字符串解析成代码再执行...

陌辞寒
2017/08/31
0
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform ConfigurationTerraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。 ...

buddie
2018/12/11
0
0
知识总结:Java的21个技术点

关于Java的编程知识,有人会问哪几个是重要的知识点,不知道大家是否知道呢?给大家分享一下! 1、JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很...

牛客网
2017/12/21
0
0
[教程]轻量级文本数据交换格式:JSON

JSON简介 JSON: JavaScript 对象表示法 (JavaScript Object Notation),是轻量级的文本数据交换格式,是存储和交换文本信息的语法。类似 XML, 但比 XML 更小、更快,更易解析。 JSON 语法是...

王永濤
2015/11/26
145
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
5
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
5
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
17
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部