HTTPヘッダに書かれた Val1="test", Val2="aaa",... といった文字列をパースしたい


Rails4 + Grape で開発を進めています。

下記のようなヘッダ情報を上手くパースする方法はありますでしょうか。

[code]

    X-Hoge-Authorization: Val1="test", Val2="aaa", Val3=1234
    
[/code]

headers['X-Hoge-Authorization']で、中身自体は取得できるのですが、  
当然ただの「Val1="test", Val2="aaa", Val3=1234」というStringになっています。  
それをさらに

[code]

    {
      Val1: "test",
      Val2: "aaa",
      Val3: 1234
    }
    
[/code]

という感じにパースするには自分で正規表現等を書くしかないのでしょうか。  
パーサーなどが用意されているようでしたら教えて頂ければと思います。




なさそうなので、簡単に書いてみました。

[code]

    #!/usr/bin/env ruby
    
    def parser(s)
      Hash[ s.split(/\s*,\s*/).map { |e| e.split(/\s*=\s*/) } ]
    end
    
    p parser('Val1="test", Val2="aaa", Val3 = 1234')
    
[/code]

こんな感じでどうでしょうか？




非標準のHTTPヘッダのフォーマットは上位プロトコルが任意に定めるものなので、汎用的なパーサなどというものは存在し得ません。逆に言えば、そのヘッダを定めているプロトコルを処理するライブラリであればパーサを必ず持っているはずです。

質問ではプロトコルが伏せられているため具体的には指摘できませんが、そのプロトコルを処理するライブラリを探してください。

なおパーサを自力で実装する場合は、必ず仕様を確認しましょう。識別子の文字種や、文字列中の`"`や`,`は許容されるのか、許容される場合どのようにエスケープされるのか、エンコーディングはどうなっているのか、など確認しておかないと、簡単な正規表現で実装出来ると思っていたら思わぬデータが来たときに破綻します。

