【问题标题】:Is it possible to validate a JSONPath expression?是否可以验证 JSONPath 表达式?
【发布时间】:2013-09-20 17:24:26
【问题描述】:

我想知道是否可以验证 JSONPath 表达式。

我的 JSONPath 是 $.phoneNumbers[:1].type

而我的json如下:

{      
  "phoneNumbers": [
     {
       "type"  : "iPhone",
       "number": "0123-4567-8888"
     },
     {
       "type"  : "home",
       "number": "0123-4567-8910"
     }
  ]
}

我想知道我是否使用了正确/有效的 JSONPath 表达式。

【问题讨论】:

  • "Right" 和 "valid" 是两个不同的东西——如果你尝试使用无效的 JSONPath,你可能会得到一个错误,但你是唯一可以评估 JSONPath 的人是“正确的”,因为没有人知道你想用你的路径选择什么。

标签: jsonpath


【解决方案1】:

您可以前往http://jsonpath.curiousconcept.com/ 并在那里尝试。

或者你可以用编程语言来做。

这是在 Ruby 中使用 jsonpath gem 的方法:

require 'jsonpath'

data=<<-EOS
{      "phoneNumbers":
 [
     {
       "type"  : "iPhone",
       "number": "0123-4567-8888"
     },
     {
       "type"  : "home",
       "number": "0123-4567-8910"
     }
 ]
}
EOS

JsonPath.new("$.phoneNumbers[:1].type").on(data)

【讨论】:

    【解决方案2】:

    @Parag A - 我刚刚编写了一个 javascript 库,您可以使用它使用 XPath 查询 JSON 结构(它是标准化的,而不是 JSONPath)。使用这个 XPath 评估器,您可以粘贴到您的 JSON 结构中并就地验证您的 XPath 查询:

    http://www.defiantjs.com/#xpath_evaluator

    将您的问题和答案放在 javascript 代码中,它看起来像这样:

    var obj = {      
      "phoneNumbers": [
         {
           "type"  : "iPhone",
           "number": "0123-4567-8888"
         },
         {
           "type"  : "home",
           "number": "0123-4567-8910"
         }
      ]
    };
    
    var qry = JSON.search(obj, '//phoneNumbers[1]/type');
    // qry[0] = 'iPhone'
    

    Defiant 扩展了全局对象 JSON,并且搜索方法总是返回一个包含匹配选择的数组(如果没有找到匹配项,则返回空数组)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2017-04-19
      • 2014-09-12
      • 1970-01-01
      相关资源
      最近更新 更多