/*** 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对象操作(基本增删改查)相关推荐

  1. mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)

    Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表 基本结构 from django.db importmodelsclassuserinfo(models ...

  2. GridView的常用操作(增删改查)

    GridView的常用操作(增删改查) void BindData()         {             string sql = "select top 10 ID,jobno, ...

  3. python pymysql实例_Python使用pymysql模块操作mysql增删改查实例分析

    Python使用pymysql模块操作mysql增删改查实例分析 发布时间:2020-09-30 16:42:12 来源:脚本之家 阅读:92 本文实例讲述了Python使用pymysql模块操作My ...

  4. Day 07 DjangoORM相关操作(增删改查)

    Day 07 DjangoORM相关操作(增删改查) 前提条件:配置数据库 **PROJECT.settings**.py DATABASES = {'default': {'ENGINE': 'dj ...

  5. oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...

    SQL查询操作:增删改查 一.SQL操作符 算术操作符 + - * / 比较操作符 = != < > <= >= BETWEEN--AND IN LINK IS NULL 逻辑 ...

  6. js操作indexedDB增删改查示例

    js操作indexedDB增删改查示例 if ('indexedDB' in window) {// 如果数据库不存在则创建,如果存在但是version更大,会自动升级不会复制原来的版本var req ...

  7. golang连接mysql操作示例增删改查

    golang本身没有提供连接mysql的驱动,但是定义了标准接口供第三方开发驱动.这里连接mysql可以使用第三方库,第三方库推荐使用https://github.com/Go-SQL-Driver/ ...

  8. Python列表及其基本的操作(增删改查)

    Python列表及其基本的操作(增删改查) 增 1.insert() 2.append() 3.extend() 删 1.del() 2.pop() 2.1pop() 2.2pop(索引) 3.rem ...

  9. Java操作MongoDB增删改查的基本操作

    今天来讲一讲我们如何使用Java来对MongoDB进行增删改查 目录 一,Java链接MongoDB 导入MongoDB驱动包 获取链接对象 关闭链接 二,Java操作MongoDB 查看库,查看集合 ...

最新文章

  1. 终于有人把Python讲清楚了!
  2. OpenGL 实例化 Instancing
  3. SpringMVC使用AOP
  4. SQL中EXISTS的使用
  5. vue定义一个全局价格处理函数
  6. linux咋socket编程,linux中socket编程
  7. 关于OAuth2的几个问题
  8. JPA-save()方法会将字段更新为null的解决方法
  9. 一次比较麻烦的性能问题诊断及解决
  10. 从荣耀小米扎堆“滑盖全面屏”,看国产手机的“取巧”式创新
  11. windows安装composer总结
  12. 电脑浏览器下载速度很慢怎么办
  13. imagenet数据集类别标签和对应的英文中文对照表
  14. iPhone4/4s运行iOS7慢怎么办
  15. 网络硬件三剑客 - 集线器、交换机与路由器
  16. java.lang.RuntimeException: com.google.inject.CreationException: Unable to create injector异常
  17. 桌面上的街舞之基础篇(09-04-29)
  18. php 网站计数器,php网站计数器
  19. 北美电影票房Top10-2020年1月10日:《1917》扬眉吐气
  20. 非常有用的免费UI设计工具和资源

热门文章

  1. 男爵领域服务器人最多,哪个大区大神多?男爵领域不是第一,黑色玫瑰垫底,对它不得不服...
  2. 《Android开源库 ~ 1》 GitHub Android Libraries Top 100 简介
  3. Java之城堡游戏设计
  4. 李开复写给中国大学生的第一封信
  5. html 标签 关闭,在HTML中,标签都必须有关闭标记。()
  6. 【气动学】基于Matlab模拟各类导弹跟踪
  7. java 框架个人心得
  8. 计算机10秒后重新启动,只需三步,Win10这样设置让你的电脑10秒内快速开机!
  9. 计算机组成原理教学网站,计算机组成原理教学网站
  10. Golang流媒体实战之一:体验开源项目lal