Python дикт до Ruby га sh до JSON и веб-разъем Rails Action Cable - PullRequest
0 голосов
/ 03 февраля 2020

Мне трудно правильно передать информацию из скрипта python в приложение rails через веб-сокеты (используя Action Cable).

Я хочу использовать входную информацию в словаре python, например this:

message = {
    'command':"subscribe",
    'identifier':{
            'channel': 'RaspChannel',
            'rasp_local_id': '1'
        }
    }

Затем он должен быть преобразован в JSON, go через веб-сокет, установленный Action Cable, а затем проанализирован в ruby ha sh на стороне сервера.

По какой-то причине я только заставил это работать, отправив через сокет простую строку:

'{"command":"subscribe","identifier":"{\\"channel\\":\\"RaspChannel\\", \\"rasp_local_id\\": \\"1\\"}"}'

Но я не смог заставить его работать, отправив json.dumps(message), даже если он возвратил что-то, что выглядело довольно хорошо для меня:

{"command": "subscribe", "identifier": {"channel": "RaspChannel", "rasp_local_id": "1"}}

Я полагаю, что протокол действия кабеля использует метод classi c ruby JSON.parse для строки json, которую он получает в качестве ввода, и по какой-то причине он всегда выдает ошибку разбора, если я не использую простую строку, о которой я упоминал выше.

Однако, поскольку я хочу сделать сообщение более сложным, было бы лучше, если бы я мог заставить его работать с реальными словарями Python из го начало.

Есть идеи о том, что мне не хватает?

1 Ответ

0 голосов
/ 04 февраля 2020

После дополнительных исследований кажется, что проблема не в кодировке JSON python, в декодировании ruby или в неправильном использовании любого из этих методов.

На самом деле может показаться, что протокол, используемый actioncable при получении сообщений, не совсем полагается на «classi c» JSON, но использует «escaped JSON в JSON» для идентификатора

Подробнее об этом на рельсы github выдают здесь https://github.com/rails/rails/issues/22675

...