一款json查询操作工具

github地址: https://github.com/dingyang9642/jsonQuery

jsonQuery.js

jsonquery.js旨在解决关于json/array对象进行相关查询、操作的工具集

使用说明

commonJs使用:import jsonQuery from 'jsonqueryjs/jsonQuery'

amd/cmd使用: define(['jsonqueryjs/jsonQuery'], function(jsonQuery) {} );

script引用:<script src='node_modules/jsonqueryjs/jsonQuery.js'></script>

数据初始化(后续操作前提)

  1. 基本概念描述
  2. jsonQuery:数据源绑定
  3. target:目标源设定

对象数据查询相关方法

  1. find:节点查询
  2. parents:父节点查询
  3. closest:查找最近的复合指定条件的祖先元素
  4. siblings:兄弟节点查询

对象数据操作相关方法

  1. insert:节点插入
  2. delete:节点删除
  3. deleteSiblings:相关兄弟节点删除
  4. replace:节点替换

其他工具方法

  1. isJson:json对象判断
  2. isArray:array对象判断
  3. isInArray:判断是否位于数组中
  4. getJsonArrLength:获取对象长度
  5. deepCopy:对象深度拷贝
  6. formatIndex:为数组添加广度/深度索引值
  7. getValueWithKey:根据key值进行对应value匹配查找
  8. compare:两组数据比较,对象不进行地址比较
  9. logInfo:日志信息控制台输出

基本概念描述

<span id="data-explain">ssss</span>

rule(规则),此处规则分为3类
规则一:"'a'='1'"
       "'a'='1'" = (key="a" & value="1")  a和1都被标记为字符串,此时解释为查询规则为

规则二:"'a'=1" / "0=1"
       "'a'=1" = (key='a' & value=1)
       "0=1"   = (key=0 & value=1) 此时说明是针对数组下标为0值为1的查询条件   

规则三:"=1" / "'a'="
       "=1" = (key= & value=1) 此时会忽略key值判断,不论是数组还是json对象,只要value=1都被认定为符合条件


modeType(匹配模式),此处分为2类

模式一:'contain'(常用)
      包含模式 如数据{"a":3},如果rule='"a"=3',则认为查找的对象为{"a":3},通过后续api,你会更好的理解
模式二:'strict'
      严格匹配模式

数据初始化

<a name="data-bind"></a>

jsonQuery(data)

描述:数据源绑定
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     var jsonInstance = jsonQuery(data);

<a name="data-target"></a>

target(rule)

描述:目标源设定
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     var jsonInstance = jsonQuery(data).target('"c"=12');

对象数据查询相关方法

<a name="data-query-find"></a>

find()

描述:节点查询
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     var result = jsonQuery(data).target('"c"=12').find().val();
     console.log(result) => 结果:{a: 10, b: 11, c: 12, d: 13}

<a name="data-query-parents"></a>

parents()

描述:父节点查询
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     var result = jsonQuery(data).target('"c"=12').parents().val();
     console.log(result) => 结果:[{a: 1, b: {a: 10, b: 11, c: 12, d: 13}, {a: 10, b: 11, c: 12, d: 13}]

<a name="data-query-closest"></a>

closest(options)

描述:查找最近的复合指定条件的祖先元素
参数:options = {key: 'testKey', value: 'testValue'} > 即为查找祖先元素中存在条件(a:1) 的父元素
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     ---实例一---
     var result = jsonQuery(data).target('"c"=12').closest({key: 'a', value: 1}).val();
     console.log(result) => 结果:{a: 1, b: {a: 10, b: 11, c: 12, d: 13}}
     ---实例二---
     var result = jsonQuery(data).target('"c"=12').closest({key: 'a', value: 10}).val();
     console.log(result) => 结果:{a: 10, b: 11, c: 12, d: 13}

<a name="data-query-siblings"></a>

siblings([modeType], [queryType])

描述:兄弟节点查询
参数:modeType 'strict' | 'contain' 两种查找匹配模式选择
     queryType 'all' | 'before' | 'after' | 'beforeAll' | 'afterAll' 兄弟节点查找的类型
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     ---实例一---
     var result = jsonQuery(data).target('"c"=12').siblings('strict', 'all').val();
     console.log(result) => 结果:[10, 11, 13]
     ---实例二---
     var result = jsonQuery(data).target('"c"=12').siblings('strict', 'before').val();
     console.log(result) => 结果:[11]
     ---实例三---
     var result = jsonQuery(data).target('"c"=12').siblings('strict', 'beforeAll').val();
     console.log(result) => 结果:[10, 11]
     ---实例四---
     var result = jsonQuery(data).target('"c"=12').siblings('contain', 'all').val();
     console.log(result) => 结果:[1]

对象数据操作相关方法

<a name="data-format-insert"></a>

insert(options, [modeType], [insertType])

描述:节点插入
参数:options = {key: 'testKey', value: 'testValue'} > 即插入的目标数据
     modeType 'strict' | 'contain' 两种查找匹配模式选择
     insertType 'before' | 'after' 插入的节点位置
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     ---实例一---
     var result = jsonQuery(data).target('"c"=12').insert({key: 'testKey', value: 'testValue'}, 'strict', 'before').val();
     console.log(result) => 结果:{a: 1, b: {a: 10, b: 11, testKey: 'testValue', c: 12, d: 13}}
     ---实例二---
     var result = jsonQuery(data).target('"c"=12').insert({key: 'testKey', value: 'testValue'}, 'contain', 'before').val();
     console.log(result) => 结果:{a: 1, testKey: 'testValue', b: {a: 10, b: 11, c: 12, d: 13}}

<a name="data-format-delete"></a>

delete([modeType])

描述:节点删除
参数:modeType 'strict' | 'contain' 两种查找匹配模式选择
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     ---实例一---
     var result = jsonQuery(data).target('"c"=12').delete('strict').val();
     console.log(result) => 结果:{a: 1, b: {a: 10, b: 11, d: 13}}
     ---实例二---
     var result = jsonQuery(data).target('"c"=12').delete('contain').val();
     console.log(result) => 结果:{a: 1}

<a name="data-format-siblings"></a>

deleteSiblings([modeType], [deleteType])

描述:相关兄弟节点删除
参数:modeType 'strict' | 'contain' 两种查找匹配模式选择
     deleteType 'all' | 'beforeAll' | 'afterAll' 删除指定位置的兄弟节点
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     ---实例一---
     var result = jsonQuery(data).target('"c"=12').deleteSiblings('strict', 'beforeAll').val();
     console.log(result) => 结果:{a: 1, b: {c: 12, d: 13}}
     ---实例二---
     var result = jsonQuery(data).target('"c"=12').deleteSiblings('contain', 'beforeAll').val();
     console.log(result) => 结果:{b: {a: 10, b: 11, c: 12, d: 13}}

<a name="data-format-replace"></a>

replace(options, [modeType])

描述:节点替换
参数:options = {key: 'testKey', value: 'testValue'} > 即插入的目标数据
     modeType 'strict' | 'contain' 两种查找匹配模式选择
实例:
     var data = {a: 1, b: {a: 10, b: 11, c: 12, d: 13}};
     ---实例一---
     var result = jsonQuery(data).target('"c"=12').replace({key: 'testKey', value: 'testValue'}, 'strict').val();
     console.log(result) => 结果:{a: 1, b: {a: 10, b: 11, testKey: 'testValue', d: 13}}
     ---实例二---
     var result = jsonQuery(data).target('"c"=12').replace({key: 'testKey', value: 'testValue'}, 'contain').val();
     console.log(result) => 结果:{a: 1, testKey: 'testValue'}

其他工具方法

<a name="data-tool-json"></a>

isJson(data)

描述:json对象判断
实例:
    var result = jsonQuery.tool.isJson({a: 1});
    console.log(result) => 结果:true

<a name="data-tool-array"></a>

isArray(data)

描述:array对象判断
实例:
    var result = jsonQuery.tool.isArray([1]);
    console.log(result) => 结果:true

<a name="data-tool-isinarray"></a>

isInArray(arr, target)

描述:判断是否位于数组中
实例:
    var result = jsonQuery.tool.isInArray([1], 1);
    console.log(result) => 结果:true  

<a name="data-tool-length"></a>

getJsonArrLength(data)

描述:获取对象长度
实例:
    var result = jsonQuery.tool.getJsonArrLength([1]);
    console.log(result) => 1  

<a name="data-tool-copy"></a>

deepCopy(data)

描述:对象深度拷贝
实例:
    var result = jsonQuery.tool.deepCopy([1, {a: 1}]);
    console.log(result) => 结果:[1, {a: 1}]  

<a name="data-tool-formatindex"></a>

formatIndex(options, yIndex)

描述:为数组添加广度/深度索引值
参数:options = {data: [a:1], xKey: 'xKey', yKey: 'yKey' }
     options.data: 格式化数据
     options.xKey: 广度索引key值
     options.yKey: 深度索引key值
     yIndex: 深度起始索引,一般为0,固定为0
实例:
     var result = jsonQuery.tool.formatIndex({data: [{a: 'a', childs: [{a: 'a'}]}]}, 0);
     console.log(result) => [{a: 'a', xIndex: 0, yIndex: 0, childs: [{a: 'a', xIndex: 0, yIndex: 1}]}]
    

<a name="data-tool-getvalue"></a>

getValueWithKey(options)

描述:根据key值进行对应value匹配查找
参数:options = {data: {a:1}, key: 'a' }
     options.data: 数据源
     options.key: 匹配value对应的查找key值(如果是数组,则直接传数组下标index即可)
实例:
     var result = jsonQuery.tool.getValueWithKey({data: {a:1}, key: 'a' });
     console.log(result) => [1]
    

<a name="data-tool-compare"></a>

compare(data1, data2)

描述:两组数据比较,对象不进行地址比较
实例:
    var result = jsonQuery.tool.compare([1, {a: 1}], [1, {a: 1}]);
    console.log(result) => 结果:true  

<a name="data-tool-log"></a>

logInfo(type, info)

描述:日志信息控制台输出
实例:
    jsonQuery.tool.logInfo('error', 'msg error');

如有疑问,加入qq群大家庭:378301400

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,145评论 0 1
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 4,968评论 0 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,067评论 1 32
  • jQuery模块 选择器、DOM操作、事件、AJAX与动画 匿名函数自执行 作用:解决命名空间与变量污染的问题 总...
    青青玉立阅读 856评论 0 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,800评论 6 13