DataPath

2024-03-07 18:38 更新
  • DataPath可称为数据路径。
  • DataPath是在Dorado的客户端所使用的,用于描述如何提取、挖掘数据的表达式。其作用比较类似于XML中所使用的XPath。
  • DataPath既可以作用在普通的JSON数据上,也可以作用在Dorado所特有的EntityList+Entity数据上。假设我们现在有一组如下结构的Entit+EntityList数据,其中包含Department和Employee两种实体类型,其中Department支持递归嵌套。

下面的说明和示例都将围绕这组数据展开。

 [
    {
        id: "D1",
        name: "XX部1",
        departments: [
            {
                id: "D11",
                name: "XX部2",
                employees: [
                    {
                        id: "0001",
                        name: "John",
                        sex: "male",
                        salary: 5000
                    },
                    ...
                ]
            },
            ...
        ]
    },
    ...
]

DataPath的基本语法为:

属性名1(参数1,参数2,..)[逻辑表达式1,逻辑表达式2,..].属性名2(参数1,参数,..2)[逻辑表达式1,逻辑表达式2,..].属性名n..

DataPath中各种特殊符号的说明:

  • ; - 用于分隔多个表达式的分隔符。例如:<code>表达式1;表达式2</code>,最终得到的结果是这两个表达式的结果的简单合集(即可能包含重复元素的合计)。

  • . - 用于分隔不同层级间对象的属性。例如:<code>employee.id</code>表示employee子对象的id属性。

      • 用于表示某一层级中所有的对象,一般仅用于表示顶层集合中的对象,且可以省略。例如:<code>*.id</code>表示所有顶层对象的id属性。

  • () - 用于定义一组表达式执行参数,多个参数之间以","分割。目前支持的参数包括:repeat - 重复的执行当前的表达式片段直到无法找到更多的子对象为止。可简写为"R"。

例如:.employees(repeat)或.employees(R)

  1. 表示所有employees属性中的对象的集合,这些对象会被提取出来被平行的放置到一个返回的数组中。
  2. leaf - 重复的执行当前的表达式片段找出所有的叶子对象。可简写为"L"。
  3. 数字 - 表示仅返回找到的前n个对象。

  • @ - 用于逻辑表达式中,表示当前正被过滤的数据对象。
  • [] - 用于定义一组逻辑表达式以对数据进行过滤,其中如果要定义多个逻辑表达式可以以","进行区隔。

例如:employees[@.get("sex")=="male"]

表示筛选出性别为男性的员工。# - DataPath中支持一些以#开头的特殊的逻辑表达式,用于声明对Entity对象的过滤方式。具有如下几种取值:#current - 表示集合中的当前Entity对象。

例如:employees[#current]

  • 表示返回employees集合中的当前Employee对象。#dirty
    - 表示集合中所有在客户端被改变过的(包含被删除的)Entity对象。#new
    - 表示集合中所有在客户端新增的Entity对象。#modified
    - 表示集合中所有在客户端被修改过的Entity对象。#deleted
    - 表示集合中所有在客户端被标记为已删除的Entity对象。# - #current的简式。

例如:#employees与employees[#current]

具有完全相同的语义。
! - 表示后面是一段自定义的数据路径片段。

例如:!CURRENT_NODE.children

中的CURRENT_NODE就是一个自定义片段。见jsdoc中关于dorado.DataPath.registerInterceptor()方法的说明。

更多的示例:

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号