2012-02-27 63 views
0

使用rails 2.3.8。JSON格式被错误地发布到/在rails中创建

我得到这样的:

[ 
    [0] "0", 
    [1] { 
      "name" => "Section", 
     "contents" => { 
      "0" => { 
       "name" => "RENAMED!", 
        "id" => "1" 
      } 
     } 
    } 
] 

通知[0]和[1]

,但在我的岗位,我格式化了JSON是这样的:

[ { 
       "name":"Section", 
       "contents":[ 
       { 
        "id":1, 
        "name":"RENAMED!" 
       } 
       ] 
      }, .. more of this type of structure [ 

那么,为什么rails会添加额外的数组?

这里是如何我张贴的对象:

$j.ajax({ 
type: "POST", 
url: 'http://url/objects/create/', 
dataType: 'text', 
async: false, 
data: data_obj, 
success: function() { 
     alert("sent"); 
} 
}); 

UPDATE

data_obj = { 
    "my_object":{ 
     "name":"hello there, I am JSON!", 
     "template_id":1, 
     "variables":{ 
      "hello":"there", 
      "me":"you" 
     }, 
     "sections":[ 
     { 
      "name":"Section", 
      "contents":[ 
      { 
       "id":1, 
       "name":"RENAMED!" 
      } 
      ] 
     }, 
     { 
      "name":"section2", 
      "contents":[ 
      { 
       "name":"something", 
       "body":"nothing" 
      }, 
      { 
       "id":2, 
       "name":"I renamed you", 
       "variables":{ 
       "hello":"i'm amazing" 
       } 
      } 
      ] 
     } 
     ], 
     "attachments":[ 
     { 
      "media_id":1 
     } 
     ] 
    } 
} 

回答

0

Rails的不加入到JSON数组的额外元素。这发生在浏览器上。

请仔细检查您的javascript以获得向阵列添加空元素的“边缘情况”。比如你如何初始化数组。

如果您不确定上述错误的位置,请在ajax调用之前添加断点并检查data_obj阵列。

ps。它应该是一个数组,但您已将其命名为data_obj。你在某个时候把它当作一个物体吗?您是否将第一个元素设置为索引1? (这将是一个错误。)您应该只有push值到阵列上。

ADDED我认为问题在于你没有将数据作为json发送。 将数据发送到服务器的默认值是键/值对。

尝试

$j.ajax({ 
    type: "POST", 
    url: 'http://url/objects/create/', 
    dataType: 'text', // what you are expecting to be returned from server 
    async: false, 
    data: {json: JSON.stringify(data_obj)}, 
    success: function() { 
    alert("sent"); 
    } 
}); 

post。您可能还必须设置MIME类型。这篇文章展示了如何。

ALT的结构:

... 
data: {my_object: JSON.stringify(data_obj.my_object)}, 
... 
+0

我会更新我的问题向您展示data_obj - 这一切都硬编码 – NullVoxPopuli 2012-02-27 19:18:30

+0

更新的答案。 – 2012-02-27 22:40:31