如何使用Regex搜索JSON哈希



我正在使用API将所有宏返回给我,我正在尝试返回所有";宏";其中";动作";包含一个";值";匹配我的Regexp模式,我将在下面链接。

我已经尝试了下面的方法和其他方法,但它对当前值返回nil。感谢的任何提示

macros["value"].select { |m| m['key'] == 'value' }.first['/^DE([0-9a-zA-Z]s?){20}$/gm']

API结果片段:

jsObj
=> {"macros"=>
[{"url"=>"https://s/1900002708354.json",
"id"=>1900002708354,
"title"=>"Append Signature",
"active"=>true,
"updated_at"=>"2021-10-22T14:11:15Z",
"created_at"=>"2021-10-22T14:11:15Z",
"position"=>10001,
"description"=>"This macro appends a signature to the message ",
"actions"=>[{"field"=>"comment_value_html", "value"=>"<p>Mit besten Grüßen,</p><p>{{current_user.name}} [{{ticket.account}}]&nbsp; <br></p><p><br></p><p>{{dc.signature_email}}<br></p><p><br></p>"}],
"restriction"=>nil},
{"url"=>"949.json",
"id"=>59071949,
"title"=>"information",
"description"=>nil,
"actions"=>[{"field"=>"priority", "value"=>"low"}, {"field"=>"comment_value", "value"=>"DE89370400440532013000" "DE89 3704
0044 0532 0130 00"
"}],
"restriction"=>nil},

期望结果:

{
"macros": [
{
"url": "x.json",
"id": 1900002708354,
"actions": [
{
"field": "comment_value_html",
"value": "DE89 3704 0044 0532 0130 00"
}
],
"restriction": null
},

{
"url": "x.json",
"id": 59071949,
"actions": [
{
"field": "priority",
"value": "low"
},
{
"field": "comment_value",
"value": "DE89 3704 0044 0532 0130 00
"
}
],
"restriction": null
},

假设macros是包含macros数据的JSON对象,则可以使用

macros.select { |m| m["actions"].any? { |w| /ADE(?:[0-9a-zA-Z]s?){20}z/.match?(w["value"]) } }

这是一个Ruby演示:

require 'json'
j = <<-DATA
{
"macros": [
{
"url": "x.json",
"id": 1900002708354,
"actions": [
{
"field": "comment_value_html",
"value": "DE11111111111222222220"
}
],
"restriction": null
},
{
"url": "x.json",
"id": 59071949,
"actions": [
{
"field": "priority",
"value": "low"
},
{
"field": "comment_value",
"value": "DE12345678901234567890"
}
],
"restriction": null
}
]}
DATA
jsObj = JSON.parse(j)
macros = jsObj['macros']
puts jsObj['macros'].select { |m| m["actions"].any? { |w| /ADE(?:[0-9a-zA-Z]s?){20}z/.match?(w["value"]) } }

输出:

{"url"=>"x.json", "id"=>1900002708354, "actions"=>[{"field"=>"comment_value_html", "value"=>"DE11111111111222222220"}], "restriction"=>nil}
{"url"=>"x.json", "id"=>59071949, "actions"=>[{"field"=>"priority", "value"=>"low"}, {"field"=>"comment_value", "value"=>"DE12345678901234567890"}], "restriction"=>nil}

.select { |m| m["actions"].any? { |w| /ADE(?:[0-9a-zA-Z]s?){20}z/.match?(w["value"]) } }主要部分获取所有actions节点,这些节点包含一个具有value键的数组,该键的值与给定的正则表达式匹配。

最新更新