rails to_json 删除引用

rails to_json remove quote

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

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

这会将 body 变成

{\"hostIds\":\"5888, 6225, 214752\",\"fields\":\"ServiceTag\"}

我怎样才能删除

\"

来自本节:

\"5888, 6225, 214752\"

它不应该有引号。

我在 Rails

上使用 Ruby

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

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 来弄清楚如何发送多个 hostId。

只需从这一行中删除 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