【问题标题】:Unable to parse the JSON document: Unrecognized token '$util': was expecting ('true', 'false' or 'null')无法解析 JSON 文档:无法识别的令牌“$util”:期待(“真”、“假”或“空”)
【发布时间】:2023-03-10 22:50:01
【问题描述】:

我正在尝试使用带有过滤器的查询:

query queryPitchesByApprovedIndex($approved: Boolean = true) {
  queryPitchesByApprovedIndex(approved: $approved) {
    items {
      id
    }
  }
}

AppSync 制作的映射模板如下所示:

{
  "version": "2017-02-28",
  "operation": "Query",
  "query": {
    "expression": "#approved = :approved",
    "expressionNames": {
      "#approved": "approved",
    },
    "expressionValues": {
      ":approved": {"B": $util.dynamodb.toBinary($ctx.args.approved)},
    },
  },
  "index": "approved-index",
  "limit": $util.defaultIfNull($ctx.args.first, 20),
  "nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.after, null)),
  "scanIndexForward": true,
  "select": "ALL_ATTRIBUTES",
}

我得到的错误是:

无法解析 JSON 文档:'Unrecognized token '$util': was expecting ('true', 'false' or 'null')\n at [Source: (String)\"{\n \"version \": \"2017-02-28\",\n \"操作\": \"查询\",\n \"查询\": {\n \"表达式\": \"#approved = :批准\",\n \"expressionNames\": {\n \"#approved\": \"approved\",\n },\n \"expressionValues\": {\n \":approved\": {\"B\": $util.dynamodb.toBinary($ctx.args.approved)},\n },\n },\n \"index\": \"approved-index\",\n \ "limit\": 20,\n \"nextToken\": null,\n \"scanIndexForward\": true,\n \"select\": \"ALL_ATTRIBUTES\",\n}\";行:10,列:31]'

知道如何解决这个问题吗?

【问题讨论】:

    标签: amazon-dynamodb graphql aws-appsync


    【解决方案1】:

    $util.dynamodb.toBinary(String data) 接受 String 作为输入,但您传递的是 Boolean,这就是它评估失败的原因。

    这是很好的反馈,我将与团队核实是否可以使实用程序更宽松并采用布尔值$util.dynamodb.toBinary(Boolean data)

    在此期间,这是一个可能的解决方法:

    #if($ctx.args.approved) 
     #set($approved = $util.dynamodb.toBinaryJson("true"))
    #else
     #set($approved = $util.dynamodb.toBinaryJson("false"))
    #end
    
    {
      "version": "2017-02-28",
      "operation": "Query",
      "query": {
        "expression": "#approved = :approved",
        "expressionNames": {
          "#approved": "approved",
        },
        "expressionValues": {
          ":approved":  $approved
        },
      },
      "index": "approved-index",
      "limit": $util.defaultIfNull($ctx.args.first, 20),
      "nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.after, null)),
      "scanIndexForward": true,
      "select": "ALL_ATTRIBUTES",
    }
    

    【讨论】:

    • 还是没有运气。这有效:"expressionValues": { ":approved": {"B": "true"}, },我认为{"B": "${$ctx.args.approved}"}$util.dynamodb.toBinary(Boolean.toString($ctx.args.approved)) 可以提供帮助,但没有。后者产生 "Encountered \"),\\n },\\n },\\n \\\"index\\\": \\\"approved-index\\\",\\n \\\ "limit\\\": \" at velocity[第 10 行,第 80 列]\n期待以下之一:\n \"[\" ...\n \",\" ...\n \")\ " ...\n ...\n"
    • 对不起,我读你的问题太快了。 Velocity 有一些有趣的方法来处理布尔类型。我编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2016-10-02
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多