【问题标题】:Ruby (Sinatra) JSON.parse do not work with json dataRuby (Sinatra) JSON.parse 不适用于 json 数据
【发布时间】:2013-02-28 15:44:45
【问题描述】:

我正在使用 ko.toJSON 从 knockout.js 获取 json 对象

self.cmaterials = ko.observableArray([]);

....

    ko.computed(function() {
    $.ajax({
         url: "/editcmat1",
         type: "PUT",
         data: ko.toJSON(
            self.cmaterials
         )
     });
});

Ruby 代码

puts params

{"id":34,"name":"混凝土","material_id":3}

当我尝试转换它时

puts JSON.parse(js)

TypeError - 无法将 Hash 转换为 String:

我怎样才能使它成为一个可用的 Ruby 哈希。

puts parse.keys
  {"id":34,"name":"Concrete","material_id":3}

【问题讨论】:

  • 我不太明白这个问题,params 已经是Hash
  • 如果你这样做params.class你会得到什么?
  • 是的 ruby​​ 表示为哈希,但 params.keys 返回整个参数,因为它是一个键。
  • 您能否使用转换为json 的代码更新问题,我的意思是javascript 与ko.toJSON(this) 调用。

标签: ruby json knockout.js sinatra


【解决方案1】:

要对代码执行您尝试执行的操作,您可以:

 puts JSON.parse(js).to_s

使用JSON.parse 方法使其成为可用哈希。您正在尝试使用 puts 输出该哈希,这意味着您必须将其转换为字符串。如果您想访问该哈希,只需执行以下操作:

hash = JSON.parse(js)
puts hash["id"] #34
puts hash["name"] #concrete
etc...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2014-12-04
    • 2011-10-09
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多