JSON入门

一、JSON是什么?

  JSON :  JavaScript Object Notation(JavaScript对象表示法)
  JSON 是轻量级的文本数据交换格式,JSON是基于纯文本的数据格式
  JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。
  JSON 文件的文件类型是 ".json"
  JSON 文本的 MIME 类型是 "application/json"
  JSON Web 站点:http://www.json.org/

二、JSON语法

1、JSON 语法是JavaScript对象表示语法的子集:

①数据在名称/值对(键值对)中②数据由逗号分隔③大括号保存对象④中括号保存数组

2、JSON 名称/值对:"Key":"Value"  

①Key 只能用 String 表示
②Value可以是:数字Number(整数或浮点数)、字符串String (在双引号中)、布尔值Boolean(true 或 false)、数组(在中括号中,元素可以是任意的Value)、对象Object(在大括号中)和null

3、JSON对象:

①可以使用点号(.)来访问/修改对象的值,也可以使用中括号([])来访问/修改对象的值。
②使用 for-in 来循环对象的属性。同时,可以使用中括号([])来访问属性的值。
③使用 delete 关键字来删除 JSON 对象的属性

三、JavaScript处理 JSON 数据

1、需要做的仅仅是发送一个 Ajax 请求,然后将服务器返回的 JSON 数据赋值给一个变量即可。有许多 Ajax 框架早已包含了处理 JSON 数据的能力,例如 Prototype(一个流行的 JavaScript 库:http://prototypejs.org)提供了 evalJSON() 方法,能直接将服务器返回的 JSON 文本变成一个 JavaScript 变量:

new Ajax.Request("http://url", {
  method: "get",
  onSuccess: function(transport) {
    var json = transport.responseText.evalJSON();
    // TODO: document.write(json.xxx);
  }
 });

2、JSON.parse()

①在接收服务器数据时一般是字符串。使用 JSON.parse() 方法将数据转换为JavaScript对象。
②如果从服务端接收的是数组的 JSON 数据,则 JSON.parse 会将其转换为JavaScript数组。
③解析前要确保你的数据是标准的 JSON 格式,否则会解析出错。
④JSON.parse(text[, reviver])
    text:必需, 一个有效的 JSON 字符串。
    reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。

3、异常

①JSON 不能存储 Date 对象。如果你需要存储 Date 对象,需要将其转换为字符串,之后再将字符串转换为 Date 对象。②JSON 不允许包含函数,但你可以将函数作为字符串存储,之后再将字符串转换为函数。

四、服务器端输出 JSON 格式数据

1、可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。

2、JSON.stringify(value[, replacer[, space]])
value:必需,一个有效的 JSON 对象。
replacer:可选。用于转换结果的函数或数组。
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。
space:可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 可以使用非数字,如:\t。

3、异常

①JSON.stringify() 会将所有日期转换为字符串。
②JSON 不允许包含函数,JSON.stringify() 会删除 JavaScript 对象的函数,包括 key 和 value。

4、将一个 Java 对象编码为 JSON 格式的文本:

①将 String 对象编码为 JSON 格式时,只需处理好特殊字符即可。另外,必须用 (") 而非 (') 表示字符串
②将 Number 表示为 JSON 就容易得多,利用 Java 的多态,我们可以处理 Integer,Long,Float 等多种 Number 格式
③Boolean 类型也可以直接通过 toString() 方法得到 JSON 的表示
④要将数组编码为 JSON 格式,可以通过循环将每一个元素编码出来
⑤最后,我们需要将 Map<String, Object> 编码为 JSON 格式,因为 JavaScript 的 Object 实际上对应的是 Java 的 Map<String, Object> 。
⑥最后,通过 Servlet 或 MVC 框架输出 JSON 时,需要设置正确的 MIME 类型(application/json)和字符编码。假定服务器使用 UTF-8 编码,则可以使用以下代码输出编码后的 JSON 文本:

response.setContentType("application/json;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter pw = response.getWriter();
pw.write(JsonUtil.toJson(obj));
pw.flush();

五、JSON 转换为 JavaScript 对象

1、由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:var obj = eval ("(" + txt + ")");

2、使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。

六、JSONP

1、Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。因为同源策略。

2、同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能。所谓同源是指,域名,协议,端口相同。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值