【问题标题】:How to scan single line params string and return two arrays?如何扫描单行参数字符串并返回两个数组?
【发布时间】:2013-04-11 20:28:56
【问题描述】:

我有以下单行字符串:

params = {"FieldStructure"=>"{\"Fields\":[{\"Title\":\"Company Name\",\"Type\":\"text\",\"ID\":\"Field6\"},{\"Title\":\"Email\",\"Type\":\"email\",\"ID\":\"Field5\"}]}", "Field6"=>"tettetette", "Field5"=>"test@tessss.pl", "EntryId"=>"25"}

格式化版本:

params = {
  "FieldStructure"=>"
    {\"Fields\":[
      {\"Title\":\"Company Name\",\"Type\":\"text\",\"ID\":\"Field6\"},
      {\"Title\":\"Email\",\"Type\":\"email\",\"ID\":\"Field5\"}]}",
    "Field6"=>"tettetette", 
    "Field5"=>"test@tessss.pl", 
    "EntryId"=>"25"
}

我想收到:[["Company Name", "Field6"], ["Email", "Field5"]]

我尝试使用扫描方法但有一些问题:

>>  fields = params['FieldStructure'].scan(/Title\":\"(.+?)\".+ID\":\"(.+?)\"/)  
=> [["Company Name", "Field5"]]

如何做到这一点?

【问题讨论】:

  • 是否有任何理由不将其视为 JSON 有效负载? FieldStructure 是一个格式良好的 json 字符串。

标签: ruby-on-rails ruby regex json wufoo


【解决方案1】:

非正则表达式解决方案:

require 'json'
params = {"FieldStructure"=>"{\"Fields\":[{\"Title\":\"Company Name\",\"Type\":\"text\",\"ID\":\"Field6\"},{\"Title\":\"Email\",\"Type\":\"email\",\"ID\":\"Field5\"}]}", "Field6"=>"tettetette", "Field5"=>"test@tessss.pl", "EntryId"=>"25"}

a = JSON.parse(params["FieldStructure"])
out = a["Fields"].map {|a| [a["Title"],a["ID"]]}
p out  # [["Company Name", "Field6"], ["Email", "Field5"]]

【讨论】:

    【解决方案2】:

    正确的做法是:

    params['FieldStructure'].scan(/Title\":\"(.+?)\".+?ID\":\"(.+?)\"/)  
    

    您在 ID 之前的 .+ 是贪婪的,这意味着它会消耗尽可能多的字符,直到找到下一个 ID。这 ?最后把它变成了不贪心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      相关资源
      最近更新 更多