You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JSONPath仅通过值匹配检测JSON数组中连续的tx、.、origin序列

检测JSON Tokens中连续tx.origin语法的方法

核心思路

你需要先定位所有value为tx的token,再校验该节点后续相邻两个节点的value是否依次为.和origin,全程不需要固定索引定位,仅通过value属性匹配即可。

方案一:纯JSONPath查询(支持相对索引的JSONPath实现可用)

如果你的运行环境使用的是Jayway等支持动态索引计算的JSONPath实现,可以直接用如下查询语句:

$.tokens[?(@.value == 'tx' && $.tokens[$.indexOf(@) + 1].value == '.' && $.tokens[$.indexOf(@) + 2].value == 'origin')]
  • 若查询返回非空数组,说明存在符合要求的连续tx.origin语法
  • 若返回空数组,说明不存在

注:部分简化版JSONPath实现不支持indexOf方法,可以改用下面的代码遍历方案。

方案二:通用代码遍历实现(兼容性最高)

如果JSONPath不支持动态索引,可以先用你现有查询拿到所有tx节点,再逐一校验后续节点:

实现步骤

  • 第一步:执行查询.tokens[?(@.value == "tx")]获取所有value为tx的节点,同时记录每个节点在tokens数组中的下标
  • 第二步:对每个下标i,校验i+2不超过数组长度的前提下,tokens[i+1].value为.且tokens[i+2].value为origin
  • 第三步:只要有一个下标满足上述条件,即匹配成功

JavaScript示例代码

const checkTxOrigin = (jsonData) => {
  const tokens = jsonData.tokens;
  // 遍历一次数组即可完成检测,性能更高
  for (let i = 0; i < tokens.length - 2; i++) {
    if (
      tokens[i].value === 'tx' &&
      tokens[i+1].value === '.' &&
      tokens[i+2].value === 'origin'
    ) {
      return true;
    }
  }
  return false;
}

// 调用示例
console.log(checkTxOrigin(你的JSON对象)); // 匹配成功返回true,失败返回false

内容的提问来源于stack exchange,提问作者Rushikesh Khamkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:45:01