文档章节

JS对象序列化为JSON对象的方法

G
 Galanodel
发布于 2017/05/05 09:34
字数 311
阅读 8
收藏 0

新一代浏览器

HTML5已原生支持JSON的解析,可以直接使用JSON.stringify()将json对象转换为json格式字符串

JSON.stringify(value)

 

对于不支持HTML5的就旧浏览器,可以自己实现JOSN的序列化

var JSON = JSON || {};
/**
 * * 将JS对象序列化为JSON字符串 *
 * @param {Mixed} o The variable to decode *
 * @return {String} The JSON string * String json = $.encode(o);
 */
JSON.stringify = (function() {
	if (typeof (JSON) !== 'undefined' && typeof (JSON.stringify) !== 'undefined') {
		return JSON.stringify;
	}
	var I = !!{}.hasOwnProperty, _ = function(I) {
		return I < 10 ? "0" + I : I;
	}, A = {
		"\b" : "\\b",
		"\t" : "\\t",
		"\n" : "\\n",
		"\f" : "\\f",
		"\r" : "\\r",
		"\"" : "\\\"",
		"\\" : "\\\\"
	};
	return (function(C) {
		if (typeof C == "undefined" || C === null) {
			return "null";
		} else {
			if (Object.prototype.toString.call(C) === "[object Array]") {
				var B = [ "[" ], G, E, D = C.length, F;
				for (E = 0; E < D; E += 1) {
					F = C[E];
					switch (typeof F) {
					case "undefined":
					case "function":
					case "unknown":
						break;
					default:
						if (G) {
							B.push(",");
						}
						B.push(F === null ? "null" : $.encode(F));
						G = true;
					}
				}
				B.push("]");
				return B.join("");
			} else {
				if ((Object.prototype.toString.call(C) === "[object Date]")) {
					return "\"" + C.getFullYear() + "-" + _(C.getMonth() + 1) + "-" + _(C.getDate()) + "T" + _(C.getHours()) + ":" + _(C.getMinutes()) + ":" + _(C.getSeconds()) + "\"";
				} else {
					if (typeof C == "string") {
						return "\"" + C.replace(/([\x00-\x1f\\"])/g, function(B, _) {
							var I = A[_];
							if (I) {
								return I;
							}
							return '';
						}).replace(/[^\u0000-\u00FF]/g, function($0) {
							return escape($0).replace(/(%u)(\w{4})/gi, "\\u$2")
						}) + "\"";
					} else {
						if (typeof C == "number") {
							return isFinite(C) ? String(C) : "null";
						} else {
							if (typeof C == "boolean") {
								return String(C);
							} else {
								B = [ "{" ], G, E, F;
								for (E in C) {
									if (!I || C.hasOwnProperty(E)) {
										F = C[E];
										if (F === null) {
											continue;
										}
										switch (typeof F) {
										case "undefined":
										case "function":
										case "unknown":
											break;
										default:
											if (G) {
												B.push(",");
											}
											B.push($.encode(E), ":", $.encode(F));
											G = true;
										}
									}
								}
								B.push("}");
								return B.join("");
							}
						}
					}
				}
			}
		}
	});
})();

 

 

 

© 著作权归作者所有

共有 人打赏支持
G
粉丝 2
博文 72
码字总数 49356
作品 0
海淀
高级程序员
私信 提问
[翻译]Mozilla的JSON

JSON 原文地址:https://developer.mozilla.org/en-US/docs/JSON 已经提交至Mozilla,地址是:https://developer.mozilla.org/zh-CN/docs/JSON 译者能力有限,欢迎拍砖 感觉这个文章有些地方...

陈冠羽
2013/05/17
0
2
JSON.stringify()、JSON.parse()、toJSON()方法使用

1.JSON.stringify(),将value(Object,Array,String,Number...)序列化为JSON字符串, 简单说就是将JSON对象转化为JSON字符。 2.JSON.parse(), 将JSON数据解析为js原生值,简单说就是将JSON字符...

干干
2018/07/13
0
0
stringify、parse、param、eval、serialize、serializeArray的一些使用方法

测试代码: 1)JSON.parse() 将 JSON 字符串转换成对象: 2)eval() 和 JSON.parse()一样都是json的的解析方法,把json字符串解析为一个object对象 两者区别: eval()和JSON.parse() 的区别: ev...

文文1
2018/05/04
0
0
struct2json V1.0 发布,C 结构体与 JSON 互转库

struct2json 是一个开源的C结构体与 JSON 快速互转库,它可以快速实现 结构体对象 与 JSON 对象 之间序列化及反序列化要求。快速、简洁的 API 设计,大大降低直接使用 JSON 解析库来实现此类...

armink
2015/11/13
4.7K
8
用 Json 来实现 PHP 与 JavaScript 间数据交换

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 简而论之,不管是xml还是json都是为了方便在客户端与服务器端交互数据的中转站,特别是用于对象型数据,比如最常见的数组。...

BENNEE
2011/03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
3
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
3
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部