javascript json对象操作(基本增删改查)
/*** Json对象操作,增删改查** @author lellansin* @blog www.lellansin.com* @version 0.1* * 解决一些常见的问题* get/set 解决获取和设置时,无节点中断的问题* create 可以创建多级节点,若存在则覆盖新值* delete 删除节点及其子节点* print_r 格式化输出对象(调试用)* 实例见底部*/function Json() {}/*** 获取Json对象中的某个节点* 例如:json.get(Data, 'country', 'province', 'city');* 结果则返回 Data['country']['province']['city']* 无则返回false*/
Json.prototype.get = function(obj, key) {var args = this.get.arguments;var result = obj;for (var i = 1; i < args.length; i++) {result = result[args[i]];if (result === undefined) {return false;};};return result;
};/*** 设置Json对象中的某个节点* 例如:obj.set(data, "ENTRY", "FA_TOKEN_INVALID", 1234);* 将 data['ENTRY']['FA_TOKEN_INVALID'] 设置为1234* 成功true, 失败false*/
Json.prototype.set = function(obj, key) {var args = this.set.arguments;if (ergodic_set(obj, args, 1)) {return true;} else {return false;}
}
/*** 在Json对象中创建节点(若存在则覆盖值)* 例如:obj.create(data, 'add', 'hello', 'test', 120);* 添加 data['create']['hello']['test'] 节点并设置值为 120* 成功true, 失败false*/
Json.prototype.create = function(obj, key) {var args = this.create.arguments;if (ergodic_create(obj, args, 1)) {return true;} else {return false;}
}/*** 在Json对象中删除节点* 例如:obj.delete(prods, 'grade', 'math');* 成功true, 失败false*/
Json.prototype.delete = function(obj, key) {var args = this.delete.arguments;if (ergodic_delete(obj, args, 1)) {return true;} else {return false;}
}/*** 返回Json对象的字符串形式(封装 ECMAScript 库函数)*/
Json.prototype.getStr = function(obj) {return JSON.stringify(obj);
}/*** 解析字符串返回Json对象(封装 ECMAScript 库函数)*/
Json.prototype.getJson = function(str) {return JSON.parse(str);
}/*** 格式化输出Json对象*/
Json.prototype.print_r = function(obj) {console.log("{")ergodic_print(obj, "");console.log("}")
}function ergodic_print(obj, indentation) {var indent = " " + indentation;if (obj.constructor == Object) {for (var p in obj) {if (obj[p].constructor == Array || obj[p].constructor == Object) {console.log(indent + "[" + p + "] => " + typeof(obj) + "");console.log(indent + "{");ergodic_print(obj[p], indent);console.log(indent + "}");} else if (obj[p].constructor == String) {console.log(indent + "[" + p + "] => '" + obj[p] + "'");} else {console.log(indent + "[" + p + "] => " + obj[p] + "");}}}
}function ergodic_set(obj, args, floor) {if (obj.constructor == Object) {for (var tmpKey in obj) {if (tmpKey == args[floor]) {if (floor < args.length - 2) {return ergodic_set(obj[tmpKey], args, floor + 1);} else {// 此时参数floor为倒数第二个,加1值为最后一个obj[tmpKey] = args[floor + 1];console.log("成功设置,返回true");return true;}}}}
}function ergodic_create(obj, args, floor) {if (obj.constructor == Object) {for (var tmpKey in obj) {if (tmpKey == args[floor]) {if (floor < args.length - 2) {return ergodic_create(obj[tmpKey], args, floor + 1);} else {obj[tmpKey] = args[floor + 1];return true;}}}}// 节点不存在,创建新节点if (floor < args.length - 1) {var jsonstr = getJsonFormat(args[args.length - 1]);for (var i = args.length - 2; i > floor; i--) {jsonstr = '{"' + args[i] + '":' + jsonstr + '}';};// 使用eval解析第三方Json数据时,可能会执行恶意代码// var node = eval('(' + jsonstr + ')');var node = JSON.parse(jsonstr);obj[args[floor]] = node;return true;}
}function ergodic_delete(obj, args, floor) {if (obj.constructor == Object) {for (var tmpKey in obj) {if (tmpKey == args[floor]) {if (floor < args.length - 1) {return ergodic_delete(obj[tmpKey], args, floor + 1);} else {delete obj[tmpKey];return true;}}}}
}function getJsonFormat(param) {if (param.constructor == String) {return '"' + param + '"';} else {return param;}
}/*** 使用实例*/var data = {OK: 200,FAIL: 500,ENTRY: {FA_TOKEN_INVALID: 1001,FA_TOKEN_EXPIRE: 1002,FA_USER_NOT_EXIST: 1003},GATE: {FA_NO_SERVER_AVAILABLE: 2001},CHAT: {FA_CHANNEL_CREATE: 3001,FA_CHANNEL_NOT_EXIST: 3002,FA_UNKNOWN_CONNECTOR: 3003,FA_USER_NOT_ONLINE: 3004}
};var json = new Json();console.log("获取Json中节点");
console.log(json.get(data, "OK")); // 200
console.log(json.get(data, "ENTRY", "FA_TOKEN_INVALID")); // 1001
console.log(json.get(data, "TEST", "获取没有的节点")); // false 没有的节点返回 falseconsole.log("设置Json中节点");
console.log(json.set(data, "ENTRY", "FA_TOKEN_INVALID", 1234)); // true 设置成功
console.log(json.get(data, "ENTRY", "FA_TOKEN_INVALID")); // 1234 获取刚设置的节点
console.log(json.set(data, "ENTRY", "测试设置没有的节点", 1234)); // false 设置失败console.log("创建新的Json节点");
var prods = {'name': 'Alan','grade': {'Chinese': 120,'math': 130,'competition': {'NOI': 'First prize'}}
};
console.log(json.create(prods, 'create', 'hello', 'test', 120)); // true
console.log(json.create(prods, 'create', 'hello', 'test2', '通过')); // trueconsole.log("格式化输出节点");
json.print_r(prods);console.log("删除节点");
console.log(json.delete(prods, 'grade', 'math')); // true
console.log(json.delete(prods, 'grade', 'competition')); // true
console.log(json.delete(prods, 'grade', '删除没有的节点')); // false
json.print_r(prods);
javascript json对象操作(基本增删改查)相关推荐
- mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)
Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表 基本结构 from django.db importmodelsclassuserinfo(models ...
- GridView的常用操作(增删改查)
GridView的常用操作(增删改查) void BindData() { string sql = "select top 10 ID,jobno, ...
- python pymysql实例_Python使用pymysql模块操作mysql增删改查实例分析
Python使用pymysql模块操作mysql增删改查实例分析 发布时间:2020-09-30 16:42:12 来源:脚本之家 阅读:92 本文实例讲述了Python使用pymysql模块操作My ...
- Day 07 DjangoORM相关操作(增删改查)
Day 07 DjangoORM相关操作(增删改查) 前提条件:配置数据库 **PROJECT.settings**.py DATABASES = {'default': {'ENGINE': 'dj ...
- oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...
SQL查询操作:增删改查 一.SQL操作符 算术操作符 + - * / 比较操作符 = != < > <= >= BETWEEN--AND IN LINK IS NULL 逻辑 ...
- js操作indexedDB增删改查示例
js操作indexedDB增删改查示例 if ('indexedDB' in window) {// 如果数据库不存在则创建,如果存在但是version更大,会自动升级不会复制原来的版本var req ...
- golang连接mysql操作示例增删改查
golang本身没有提供连接mysql的驱动,但是定义了标准接口供第三方开发驱动.这里连接mysql可以使用第三方库,第三方库推荐使用https://github.com/Go-SQL-Driver/ ...
- Python列表及其基本的操作(增删改查)
Python列表及其基本的操作(增删改查) 增 1.insert() 2.append() 3.extend() 删 1.del() 2.pop() 2.1pop() 2.2pop(索引) 3.rem ...
- Java操作MongoDB增删改查的基本操作
今天来讲一讲我们如何使用Java来对MongoDB进行增删改查 目录 一,Java链接MongoDB 导入MongoDB驱动包 获取链接对象 关闭链接 二,Java操作MongoDB 查看库,查看集合 ...
最新文章
- 终于有人把Python讲清楚了!
- OpenGL 实例化	Instancing
- SpringMVC使用AOP
- SQL中EXISTS的使用
- vue定义一个全局价格处理函数
- linux咋socket编程,linux中socket编程
- 关于OAuth2的几个问题
- JPA-save()方法会将字段更新为null的解决方法
- 一次比较麻烦的性能问题诊断及解决
- 从荣耀小米扎堆“滑盖全面屏”,看国产手机的“取巧”式创新
- windows安装composer总结
- 电脑浏览器下载速度很慢怎么办
- imagenet数据集类别标签和对应的英文中文对照表
- iPhone4/4s运行iOS7慢怎么办
- 网络硬件三剑客 - 集线器、交换机与路由器
- java.lang.RuntimeException: com.google.inject.CreationException: Unable to create injector异常
- 桌面上的街舞之基础篇(09-04-29)
- php 网站计数器,php网站计数器
- 北美电影票房Top10-2020年1月10日:《1917》扬眉吐气
- 非常有用的免费UI设计工具和资源
热门文章
- 男爵领域服务器人最多,哪个大区大神多?男爵领域不是第一,黑色玫瑰垫底,对它不得不服...
- 《Android开源库 ~ 1》 GitHub Android Libraries Top 100 简介
- Java之城堡游戏设计
- 李开复写给中国大学生的第一封信
- html 标签 关闭,在HTML中,标签都必须有关闭标记。()
- 【气动学】基于Matlab模拟各类导弹跟踪
- java 框架个人心得
- 计算机10秒后重新启动,只需三步,Win10这样设置让你的电脑10秒内快速开机!
- 计算机组成原理教学网站,计算机组成原理教学网站
- Golang流媒体实战之一:体验开源项目lal