0

次の単一行の文字列があります。

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"]]

これを達成する方法は?

4

2 に答える 2

1

正しい方法は次のとおりです。

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

ID の前の .+ は greddy でした。つまり、次の ID が見つかるまで、可能な限り多くの文字を消費していました。? 結局、それはグレッディではありません。

于 2013-04-11T12:01:22.413 に答える
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"]]
于 2013-04-11T12:05:29.973 に答える