【问题标题】:How to query Map values from the Daml through JSonApi?如何通过JSonApi从Daml中查询Map值?
【发布时间】:2019-11-29 06:59:52
【问题描述】:

我试图查询 Daml 模板文本 - 映射它给我一个空集而不是给出那个特定的数据 - 例如:

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

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

【问题讨论】:

    标签: daml


    【解决方案1】:

    TextMap 的行为类似于查询 API 中的列表。地图是一个值,您只能将其作为一个整体进行匹配。您可以查看列表 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"
      } 
    }
    

    即使地图项的顺序交换了,m 的参数表示相同的地图,所以值是相等的。

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

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

    【讨论】:

    • 是否有任何选项可用于包含密钥或将来您将提供?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多