【问题标题】:Retrieve consecutive array element from an array using JSONPath without using index, only by their value使用 JSONPath 从数组中检索连续的数组元素,而不使用索引,仅通过它们的值
【发布时间】:2021-11-24 00:12:53
【问题描述】:

我有一个如下的 json 正文 -

    {
  "type": "SourceUnit",
  "children": [
    {
      "type": "PragmaDirective",
      "name": "solidity",
      "value": ">=0.4.22 <0.9.0"
    },
    {
      "type": "ContractDefinition",
      "name": "txorigin",
      "baseContracts": [],
      "subNodes": [],
      "kind": "contract"
    }
  ],
  "tokens": [
    {
      "type": "Keyword",
      "value": "pragma"
    },
    {
      "type": "Identifier",
      "value": "solidity"
    },
    {
      "type": "Punctuator",
      "value": ">="
    },
    {
      "type": "Version",
      "value": "0.4.22"
    },
    {
      "type": "Punctuator",
      "value": "<"
    },
    {
      "type": "Version",
      "value": "0.9.0"
    },
    {
      "type": "Punctuator",
      "value": ";"
    },
    {
      "type": "Keyword",
      "value": "contract"
    },
    {
      "type": "Identifier",
      "value": "txorigin"
    },
    {
      "type": "Punctuator",
      "value": "{"
    },
    {
      "type": "type",
      "value": "address"
    },
    {
      "type": "Identifier",
      "value": "owner"
    },
    {
      "type": "Punctuator",
      "value": ";"
    },
    {
      "type": "Keyword",
      "value": "constructor"
    },
    {
      "type": "Punctuator",
      "value": "("
    },
    {
      "type": "Punctuator",
      "value": ")"
    },
    {
      "type": "Keyword",
      "value": "public"
    },
    {
      "type": "Punctuator",
      "value": "{"
    },
    {
      "type": "Identifier",
      "value": "owner"
    },
    {
      "type": "Punctuator",
      "value": "="
    },
    {
      "type": "Identifier",
      "value": "msg"
    },
    {
      "type": "Punctuator",
      "value": "."
    },
    {
      "type": "Identifier",
      "value": "sender"
    },
    {
      "type": "Punctuator",
      "value": ";"
    },
    {
      "type": "Punctuator",
      "value": "}"
    },
    {
      "type": "Keyword",
      "value": "function"
    },
    {
      "type": "Identifier",
      "value": "sendTo"
    },
    {
      "type": "Punctuator",
      "value": "("
    },
    {
      "type": "type",
      "value": "address"
    },
    {
      "type": "Identifier",
      "value": "receiver"
    },
    {
      "type": "Punctuator",
      "value": ","
    },
    {
      "type": "type",
      "value": "uint"
    },
    {
      "type": "Identifier",
      "value": "amount"
    },
    {
      "type": "Punctuator",
      "value": ")"
    },
    {
      "type": "Keyword",
      "value": "public"
    },
    {
      "type": "Punctuator",
      "value": "{"
    },
    {
      "type": "Identifier",
      "value": "require"
    },
    {
      "type": "Punctuator",
      "value": "("
    },
    {
      "type": "Identifier",
      "value": "tx"
    },
    {
      "type": "Punctuator",
      "value": "."
    },
    {
      "type": "Identifier",
      "value": "origin"
    },
    {
      "type": "Punctuator",
      "value": "=="
    },
    {
      "type": "Identifier",
      "value": "owner"
    },
    {
      "type": "Punctuator",
      "value": ")"
    },
    {
      "type": "Punctuator",
      "value": ";"
    },
    {
      "type": "Punctuator",
      "value": "("
    },
    {
      "type": "type",
      "value": "bool"
    },
    {
      "type": "Identifier",
      "value": "success"
    },
    {
      "type": "Punctuator",
      "value": ","
    },
    {
      "type": "Punctuator",
      "value": ")"
    },
    {
      "type": "Punctuator",
      "value": "="
    },
    {
      "type": "Identifier",
      "value": "receiver"
    },
    {
      "type": "Punctuator",
      "value": "."
    },
    {
      "type": "Identifier",
      "value": "call"
    },
    {
      "type": "Punctuator",
      "value": "."
    },
    {
      "type": "Identifier",
      "value": "value"
    },
    {
      "type": "Punctuator",
      "value": "("
    },
    {
      "type": "Identifier",
      "value": "amount"
    },
    {
      "type": "Punctuator",
      "value": ")"
    },
    {
      "type": "Punctuator",
      "value": "("
    },
    {
      "type": "Keyword",
      "value": ""
    },
    {
      "type": "Punctuator",
      "value": ")"
    },
    {
      "type": "Punctuator",
      "value": ";"
    },
    {
      "type": "Identifier",
      "value": "require"
    },
    {
      "type": "Punctuator",
      "value": "("
    },
    {
      "type": "Identifier",
      "value": "success"
    },
    {
      "type": "Punctuator",
      "value": ")"
    },
    {
      "type": "Punctuator",
      "value": ";"
    },
    {
      "type": "Punctuator",
      "value": "}"
    },
    {
      "type": "Punctuator",
      "value": "}"
    },
    {
      "type": "Keyword",
      "value": "<EOF>"
    }
  ]
}

每当执行任何代码时,我都想检查上面的“tx”、“.”、“origin”值是否在我生成的 json 中可用。并且,它应该像 (tx.origin) 一样连续。如果它可用,它会返回一些东西。我可以得到任何一个值 - .tokens[?(@.value == "tx")].value 我需要连续检查所有 3 个。

你们能帮帮我吗? 提前致谢。

【问题讨论】:

  • 我建议使用 JSON Schema 进行验证。然后,如果数据验证,您可以直接访问这些值,因为您知道它们在哪里。
  • @gregsdennis ,这就是问题所在,我不知道值在哪里,我的意思是我可以在我的 json 路径中给出索引。还有其他字段可以更改上述值的位置/索引

标签: jsonpath json-path-expression


【解决方案1】:

另一种选择是只获取值

$.tokens[*].value

这将为您提供所有值。它们应该按正确的顺序排列,但不能保证。

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2012-08-25
    相关资源
    最近更新 更多