rails to_json删除引用

时间:2016-12-20 20:21:05

标签: ruby-on-rails json ruby net-http

我正在使用LogMeIn Central API,在我的请求正文中,我需要发送一些Json。我有这个:

  host_ids = LmiHost.all.collect {|lmi| lmi.host_id}.join ', '
  create_servicetag_report_request.body = {hostIds: host_ids, fields: 'ServiceTag'}.to_json

这将身体变成

  

{\“hostIds \”:\“5888,6225,214752 \”,\“fields \”:\“ServiceTag \”}

如何删除

  

\“

来自本节:

  

\“5888,6225,214752 \”

不要在它周围加上引号。

我正在使用Ruby on Rails

3 个答案:

答案 0 :(得分:3)

to_json添加\"(转义引用)的原因是因为它将hostIds转换为字符串。在您的rails控制台中尝试这样来查看差异。

{"hostids":[0,1,2,3]}.to_json
=> "{\"hostids\":[0,1,2,3]}"

{"hostids":"[0,1,2,3]"}.to_json
=> "{\"hostids\":\"[0,1,2,3]\"}"

通过尝试,可以看到另一种方法:puts [1,2,3,4] vs puts "[1,2,3,4]"

最终,我会参考LMI Central API来确切了解如何发送多个hostIds。

答案 1 :(得分:1)

您可以使用JSON.parse(create_servicetag_report_request.body[:hostIds])来解析它。

答案 2 :(得分:0)

只需从此行中删除join部分:

host_ids = LmiHost.all.collect { |lmi| lmi.host_id }.join ', '

join将您的id数组加入逗号分隔的字符串中。这似乎不是你想要的。

顺便说一下。您可以将.collect { |lmi| lmi.host_id }缩短为map(&:host_id)

create_servicetag_report_request.body = {
  hostIds: LmiHost.all.map(&:host_id), 
  fields:  'ServiceTag'
}.to_json