daml - 如何通过JSonApi从Daml中查询Map值?

标签 daml

我尝试查询 Daml 模板文本 - 映射它给我抛出空集,而不是提供特定的数据 - 例如:

 "Data": [
            { "information":"XYZ",
        {
            "textMap": {
                "Type": {
                    "_1": "A",
                    "_2": "B"
                },
                "Date": {
                    "_1": "2019-11-29",
                    "_2": "AMD"
                },
                }
            }
        }}
    ]

这里,在上面的示例中,我尝试仅使用类型键进行查询,但它没有抛出与该特定键相关的任何数据,但是当我发送 Map 的两个键值时,我可以获得该特定数据。但是我只想发送该 Map 内的一个键值以进行查询。如何在 daml 中实现这一目标。

最佳答案

TextMap 的行为类似于查询 API 中的列表。 map 是一个值,您只能将其作为一个整体进行匹配。您可以看到列表 here 的行为.

假设您的模板中有一个简单的 TextMap:

daml 1.2
module Main where

import DA.TextMap as Map

template T
  with
    p : Party
    m : TextMap Int
  where
    signatory p

setup = scenario do
  p <- getParty "p"
  submit p do
    create T with
      p
      m = Map.fromList [
          ("one", 1),
          ("two", 2)
        ]

使用以下有效负载对 contracts/search 的调用将匹配。

{ 
  "%templates": [ 
    { 
      "moduleName": "Main", 
      "entityName": "T" 
    } 
  ], 
  "m" : {
    "two": "2", 
    "one": "1"
  } 
}

即使 map 项的顺序颠倒,m 的参数也表示相同的 map ,因此值相等。

但是,简单地更改为 "m": { "one": "1"} 将不匹配。我们正在查询 T 类型的合约,其中的 map 只有一个条目 "one"

目前没有“containsKey”或“contains”的查询选项。

关于daml - 如何通过JSonApi从Daml中查询Map值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59100131/

相关文章:

daml - 向导航器添加按钮以进行选择

daml - 通过 Java 或 JavaScript 以外的语言使用 DAML Ledger API

daml - 如何访问一个选择的多个返回参数

daml - 获取今天日期的函数?

daml - 如何提取党的名称?

types - DAML 有对应的 Google 吗?

dictionary - 如何在 DAML 中访问映射键/值?

daml - 在 'date' 语句或 'create' 语句内使用 'exercise' 函数时出现问题