从javascript / jquery到ruby / sinatra的多维数组

时间:2009-10-30 02:15:58

标签: ruby ajax json multidimensional-array sinatra

如何将二维数组从javascript传递给ruby,好吗?我在客户端有这个:

function send_data() {
    var testdata = {
        "1": {
            "name": "client_1",
            "note": "bigboy"
        },
        "2": {
            "name": "client_2",
            "note": "smallboy"
        }
    }

    console.log(testdata);
    $.ajax({
      type: 'POST',
      url: 'test',
      dataType: 'json',
      data: testdata
    });
  }

这在服务器端:

post '/test' do p params end

但我无法做对。我能在服务器端得到的最好的就是

{"1"=>"[object Object]", "2"=>"[object Object]"}

我尝试在客户端添加JSON.stringify,在服务器端添加JSON.parse,但第一次产生了

{"{\"1\":{\"name\":\"client_1\",\"note\":\"bigboy\"},\"2\":{\"name\":\"client_2\",\"note\":\"smallboy\"}}"=>nil}

而后者抛出了一个TypeError - 无法将Hash转换为String。

有人可以帮忙,或者发一小段正确的代码吗?谢谢

2 个答案:

答案 0 :(得分:0)

您可能希望在javascript端手动构建JSON:

[[{'object':'name1'},{'object':'name2'}],[...],[...]]

这将构建一个包含对象的数组数组。

看起来像这样:

testdata = [[{
        "1": {
            "name": "client_1",
            "note": "bigboy"
        }],
        [{"2": {
            "name": "client_2",
            "note": "smallboy"
        }]
    }]

我可能会有一些东西,但这应该接近它的样子。

答案 1 :(得分:0)

我不确定这是否会有所帮助,但我有两个想法:序列化字段和/或迭代数组。

我设法通过设置必须存储子数组的字段来获取json数组到activerecord对象:

class MyModel < ActiveRecord::Base
  serialize :tags
end

并使用迭代器处理json数组:

f = File.read("myarrayof.json")
jarray = JSON.load(f)
jarray.each { |j| MyModel.create.from_json(j.to_json).save }

转换来回看起来有点麻烦,但我发现这是处理数组最明显的方法。