DataPath

2024-03-07 18:38 更新
  • DataPath可稱為數(shù)據(jù)路徑。
  • DataPath是在Dorado的客戶端所使用的,用于描述如何提取、挖掘數(shù)據(jù)的表達式。其作用比較類似于XML中所使用的XPath。
  • DataPath既可以作用在普通的JSON數(shù)據(jù)上,也可以作用在Dorado所特有的EntityList+Entity數(shù)據(jù)上。假設我們現(xiàn)在有一組如下結構的Entit+EntityList數(shù)據(jù),其中包含Department和Employee兩種實體類型,其中Department支持遞歸嵌套。

下面的說明和示例都將圍繞這組數(shù)據(jù)展開。

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

DataPath的基本語法為:

屬性名1(參數(shù)1,參數(shù)2,..)[邏輯表達式1,邏輯表達式2,..].屬性名2(參數(shù)1,參數(shù),..2)[邏輯表達式1,邏輯表達式2,..].屬性名n..

DataPath中各種特殊符號的說明:

  • ; - 用于分隔多個表達式的分隔符。例如:<code>表達式1;表達式2</code>,最終得到的結果是這兩個表達式的結果的簡單合集(即可能包含重復元素的合計)。

  • . - 用于分隔不同層級間對象的屬性。例如:<code>employee.id</code>表示employee子對象的id屬性。

      • 用于表示某一層級中所有的對象,一般僅用于表示頂層集合中的對象,且可以省略。例如:<code>*.id</code>表示所有頂層對象的id屬性。

  • () - 用于定義一組表達式執(zhí)行參數(shù),多個參數(shù)之間以","分割。目前支持的參數(shù)包括:repeat - 重復的執(zhí)行當前的表達式片段直到無法找到更多的子對象為止??珊唽憺?quot;R"。

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

  1. 表示所有employees屬性中的對象的集合,這些對象會被提取出來被平行的放置到一個返回的數(shù)組中。
  2. leaf - 重復的執(zhí)行當前的表達式片段找出所有的葉子對象。可簡寫為"L"。
  3. 數(shù)字 - 表示僅返回找到的前n個對象。

  • @ - 用于邏輯表達式中,表示當前正被過濾的數(shù)據(jù)對象。
  • [] - 用于定義一組邏輯表達式以對數(shù)據(jù)進行過濾,其中如果要定義多個邏輯表達式可以以","進行區(qū)隔。

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

表示篩選出性別為男性的員工。# - DataPath中支持一些以#開頭的特殊的邏輯表達式,用于聲明對Entity對象的過濾方式。具有如下幾種取值:#current - 表示集合中的當前Entity對象。

例如:employees[#current]

  • 表示返回employees集合中的當前Employee對象。#dirty
    - 表示集合中所有在客戶端被改變過的(包含被刪除的)Entity對象。#new
    - 表示集合中所有在客戶端新增的Entity對象。#modified
    - 表示集合中所有在客戶端被修改過的Entity對象。#deleted
    - 表示集合中所有在客戶端被標記為已刪除的Entity對象。# - #current的簡式。

例如:#employees與employees[#current]

具有完全相同的語義。
! - 表示后面是一段自定義的數(shù)據(jù)路徑片段。

例如:!CURRENT_NODE.children

中的CURRENT_NODE就是一個自定義片段。見jsdoc中關于dorado.DataPath.registerInterceptor()方法的說明。

更多的示例:

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號