2016-12-20 6 views
-2

Я работаю над LogMeIn Central API и в теле моего запроса мне нужно отправить Json. У меня есть это:rails to_json remove quote

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 \", \ "поля \": \ "ServiceTag \" }

как я могу удалить

из этого раздела:

\ "5888, 6225, 214752 \"

это не предполагают, чтобы иметь кавычки вокруг него.

Я использую Ruby On Rails

+2

JSON строки должны быть обернуты в двойные кавычки - вы уверены, что API ожидает JSON, в отличие от разделенных запятыми список идентификаторов? – Brian

+0

положительный, см. Здесь http://developer.logmein.com/api/hostactions/#system-inventory –

+1

Затем удалите 'join' из строки 1, и вам хорошо идти – engineersmnky

ответ

2

Причина to_json добавляет \" (экранированные цитаты), потому что она преобразует hostIds в виде строки. В консоли рельсов попробуйте это, чтобы увидеть разницу.

{"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] против puts "[1,2,3,4]"

В конечном счете я хотел бы сослаться на LMI Central API, чтобы точно выяснить, как несколько hostIds могут быть отправлены.

+0

' host_ids' - это строка, потому что OP явно сделал его одним. используя 'join ','' – engineersmnky

+0

Правильно, и поэтому он отображается как таковой. Если OP хочет действительный json, список идентификаторов может быть только разделенной запятой строкой или массивом/массивом хешей. – whodini9

+1

Он просто добавил ссылку на свой API Doc: «hostIds»: [, , ...] , поэтому он должен быть массивом, а не строкой. – whodini9

0

Вы можете использовать JSON.parse(create_servicetag_report_request.body[:hostIds]) разобрать его.

0

Просто удалите join часть из этой линии:

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

join соединяет ваш массив идентификаторов в разделенных запятыми. Это не похоже на то, что вы хотите.

КПП. Вы можете сократить .collect { |lmi| lmi.host_id } к map(&:host_id):

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