【问题标题】:Converting x-www-form-urlencoded to json将 x-www-form-urlencoded 转换为 json
【发布时间】:2015-08-16 02:21:31
【问题描述】:

在我的应用程序中,我有控制器,它对作为 JSON 接收的请求执行多项操作,但有时我以 x-www-form-urlencoded 形式接收请求。 我想在控制器操作开始时将其转换为 JSON。

例如我想转换:

%7B%0D%0A++%22action%22%3A+%22new_pet%22%2C%0D%0A++%22content%22%3A+%7B%0D%0A++++%220%22%3A+%7B%0D%0A++++++%22name%22%3A+%22Amigo%22%2C%0D%0A++++++%22sex%22%3A+%22male%22%2C%0D%0A++++++%22owner%22%3A+%227449903%22%2C%0D%0A++++++%22type%22%3A+%22dog%22%0D%0A++++%7D%0D%0A++%7D%2C%0D%0A++%22controller%22%3A+%22animal%22%0D%0A%7D

到:

{
  "action": "new_pet",
  "content": {
    "0": {
      "name": "Amigo",
      "sex": "male",
      "owner": "7449903",
      "type": "dog"
    }
  },
  "controller": "animal"
}

【问题讨论】:

  • 您的字符串格式错误吗?我在您的字符串上运行 puts puts CGI.unescape(s).tr('=', ':').tr('&', ' '),发现它不是有效的 JSON。它错过了最后一个}
  • 这看起来不像一个有效的 x-www-form-urlencoded 字符串。
  • 对不起,我的其他客户端编码器转换错误。我用有效的 x-www-form-urlencoded 字符串更新了帖子

标签: ruby json ruby-on-rails-3


【解决方案1】:

这实际上可以在 Ruby 中完成,而无需涉及使用 URI 模块的 Rails。这是使用您的 x-www-form-data 的示例

require 'uri'

FORM_DATA = '%7B%0D%0A++%22action%22%3A+%22new_pet%22%2C%0D%0A++%22content%22%3A+%7B%0D%0A++++%220%22%3A+%7B%0D%0A++++++%22name%22%3A+%22Amigo%22%2C%0D%0A++++++%22sex%22%3A+%22male%22%2C%0D%0A++++++%22owner%22%3A+%227449903%22%2C%0D%0A++++++%22type%22%3A+%22dog%22%0D%0A++++%7D%0D%0A++%7D%2C%0D%0A++%22controller%22%3A+%22animal%22%0D%0A%7D'
decoded_form = URI.decode_www_form(FORM_DATA)
json = decoded_form[0][0]
puts json
# => 
# {
#   "action": "new_pet",
#   "content": {
#     "0": {
#       "name": "Amigo",
#       "sex": "male",
#       "owner": "7449903",
#       "type": "dog"
#     }
#   },
#   "controller": "animal"
# }

【讨论】:

    猜你喜欢
    • 2018-06-11
    • 2020-10-06
    • 2019-12-04
    • 2020-08-21
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多