JSON変換モジュール

と、思ったけど、入れ子になったHashとArrayをJSONに変換するRubyスクリプトだけ貼りつけておこう。上のAjaxCGI側で使っています。

module JSON
  module_function

  def str2json(str)
    '"' + str.gsub(/"/,'\"') + '"'
  end

  def value2json(value)
    case value.class.to_s
    when 'Hash'
      return hash2json(value)
    when 'Array'
      return array2json(value)
    when 'String'
      return str2json(value)
    when 'NilClass'
      return "null"
    else
      return str2json(value.to_s)
    end
  end

  def hash2json(hash)
    members = hash.map do |key,value|
      "#{str2json(key)} : #{value2json(value)}"
    end.join(',')
    return "{ #{members} }"
  end

  def array2json(ar)
    ret = ar.map do |item|
      value2json(item)
    end.join(',')
    return "[#{ret}]"
  end
end

使い方は、こんな感じ。

test = {}
test['hoge'] = [1,2,3,'string']
puts JSON.hash2json(test)
=> { "hoge" : ["1","2","3","string"] }

適当に作ったので変かもしれません。特に文字列をエスケープしているあたり。ツッコミ歓迎。
著作権は主張しませんが、自己責任でのご利用をお願いします。