如何使用正则表达式搜索 JSON 哈希?

Posted

技术标签:

【中文标题】如何使用正则表达式搜索 JSON 哈希?【英文标题】:How to search a JSON hash using a Regex? 【发布时间】:2021-12-31 21:13:43 【问题描述】:

我正在使用 API 将所有宏返回给我,我正在尝试返回所有“宏”,其中“动作”包含与我的正则表达式模式匹配的“值”,我将在下面链接。

我尝试了以下方法和其他方法,但它返回的当前值为零。任何提示表示赞赏

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

API结果sn-p:

   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
            ,

【问题讨论】:

无论何时给出示例,请显示所需的结果,此处为有效的 Ruby 对象(例如,数组或哈希)。请注意,"IBANS" 不会出现在 JSON 中(仅"IBAN")。 “宏”是什么意思? @CarySwoveland 感谢您的提示,我已经更新了所需的结果。在这种情况下,一个宏在各种文本模板中,如上面的 API 响应所示,上面我有一个包含 3 个宏的 sn-p。 还是有点不清楚。也许您需要的只是获取macros,其中actions 包含与您的模式匹配的value?见ideone.com/JWT8Xr @WiktorStribiżew 是的,这正是我想要的,我会更新以使其更清晰,谢谢。 【参考方案1】:

鉴于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 键,其值与给定的正则表达式匹配。

【讨论】:

感谢您的回答,但是,尽管它与您给定的链接一起使用,但它为我返回了空数组。似乎无法到达 value 键,因为没有 Regexp 返回非空结果。 值被称为 NilClass @cdln 这意味着你没有提供你所拥有的 JSON。 奇怪,我从 Postman 那里拿了打印出来的结果。我用jsobj的值更新了sn-p,应该是准确的。 就是这样。我会尽量让我的问题更简洁+清楚地说明未来的问题,感谢您的帮助。

以上是关于如何使用正则表达式搜索 JSON 哈希?的主要内容,如果未能解决你的问题,请参考以下文章

什么时间用正则表达式什么时间用json提取器

如何创建正则表达式来查找 JS 文件(或 JSON)中的所有字符串

如何解释 Python 中正则表达式的重音字符?

如何使用 PHP 中的正则表达式在字符串中搜索可以按任何顺序排列的子字符串

如何使用正则表达式匹配 JSON 字符串? [关闭]

使用正则表达式查找哈希表/字典/地图