【问题标题】:How do I turn a string into a JSON object?如何将字符串转换为 JSON 对象?
【发布时间】:2013-06-26 03:30:56
【问题描述】:

我有一个这样的字符串:

//string
" { "1" => "one stuff\n print 'hi'.. ",
          "2" => "two stuff\n print 'by' "} "

如何将其转换为 JSON 对象,以便我可以访问其部分,例如string["1"]?

(跟进到 Sending Data to Javascript from Rails (Forms))

【问题讨论】:

  • JSON 一个字符串。如果要访问其部分,则需要将其从 JSON 转换为原生对象结构。如果您正在谈论在 JavaScript 中执行此操作,那么您会这样做 var obj=JSON.parse(my_json_string);
  • @CrazyTrain 你不是说JSON.stringify(my_json_string);吗?
  • @am-rails...你有没有想过将=>字符替换为:,然后解析为json?
  • @Ohgodwhy:不,如果它是格式为 JSON 的字符串,则需要将其解析为相关编程语言的本机对象结构,以便能够访问其各个成员。除非我误解了这个问题,否则 OP 会将 JSON 从 Ruby on Rails 应用程序发送到 JavaScript 客户端。
  • ["一个东西\n print 'hi'.. ", "两个东西\n print 'by' "]

标签: javascript jquery ruby-on-rails json


【解决方案1】:

确保您在 Rails 中正确渲染它。您列出的字符串不是有效的 javascript(它使用 ruby​​ hashrocket 语法而不是 JSON 哈希语法):

class ThingsController < ApplicationController
  def index
    respond_to do |format|
      format.json do
        str = ' { "1": "one stuff\n print \'hi\'.. ", "2": "two stuff\n print \'bye\' "} '
        render json: str
      end
    end
  end
end

或者更好(依靠 rails 从 ruby​​ 哈希为您构建 json):

class ThingsController < ApplicationController
  def index
    respond_to do |format|
      format.json do
        obj = {1 => "one stuff\n print 'hi'", 2 => "two stuff\n print 'bye'" }
        render json: obj
      end
    end
  end
end

然后在 /things.json 获取 json,假设它已连接到您的 config/routes.rb 文件中。

【讨论】:

  • 谢谢。该字符串来自 Rails 表单,因此我可以使在那里提交的文本具有 : 而不是 =&gt; (就像在您的第一个答案中一样)但我没有将它作为第二个答案中要求的对象,它以字符串形式出现。
  • 在向浏览器提供来自用户输入的内容时要非常小心。具体见guides.rubyonrails.org/security.html#cross-site-scripting-xss
  • 这可能是未来的问题,但目前用户无法访问这些表单。
猜你喜欢
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
相关资源
最近更新 更多