【问题标题】:how to access multiple keys in jsonpath in one go如何一次性访问jsonpath中的多个键
【发布时间】:2014-01-01 12:49:40
【问题描述】:

我在 config 中存储了一个哈希路径(在 JsonPath 中使用 ruby​​),在一种情况下,我需要为一个变量获取多个字段。

例子:

{
 "a" => 1,
 "b" => 2,
 "c" => 3,
 "d" => 4,
 "e" => 5,
}

对于一个变量,我需要值为3-4-5。有没有办法一次性从JsonPath 访问"c""d""e"

$$$$$$$$$$$$$编辑$$$$$$$$$$$$$

这似乎是目前 jsonpath gem 的限制,请随时建议其他 gem/方式这样做。

【问题讨论】:

  • 这是一个关于哈希的问题,还是关于 xpath、json 或 jsonpath 的问题?
  • 不,这个和Hash无关,和jsonpath有关,我想知道如何通过JSON-Path访问,可以存储在config中。
  • 你应该从问题中删除哈希标签。

标签: ruby jsonpath


【解决方案1】:

是的..使用Hash#values_at进行如下操作:

hsh = {
 "a" => 1,
 "b" => 2,
 "c" => 3,
 "d" => 4,
 "e" => 5,
}

hsh.values_at("c","d","e").join('-')
# => "3-4-5"

【讨论】:

  • 感谢 Arup,但我想通过 JSONPath 来完成,因为这是配置并且可以更改,所以我不想更改代码并从配置中读取路径。我也可以存储在多个 json-paths 中,但如果可以通过一个路径,因为配置可以从获取 3 个字段的值更改为 4 个哈希字段。
【解决方案2】:

我通过编写一个小函数来解决此函数,该函数将参数作为逗号分隔路径的多个路径的数组并返回这些路径的值,以下是代码:-

def find_multiple_path hash, path
  return path.inject([]){|tmp,p| tmp<< JsonPath.on(hash, p)}.flatten.join("-") if path and path.kind_of?(Array)

  return path.split(",").inject([]){|tmp,p| tmp<< JsonPath.on(hash, p)}.flatten.join("-") if path and path.include?(",") and path.include?("$")
end

其中路径可以是 ["$.c","$.d","$.e"] 或 "$.c,$.d,$.e"。

【讨论】:

    猜你喜欢
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多