Проблема в том, что у вас есть несколько уровней JSON с закодированной строкой, вложенных в ваши объекты.
\
- это escape-символы.Они указывают, что следующая за ними кавычка не является завершающей кавычкой, а скорее символом в строке.Например, допустим, я хочу иметь объект javascript, который выглядит следующим образом:
// myFile.javascript
{ "x" : "abc" }
const s = JSON.stringify(foo) // s is a string
Тогда s
будет включать эти escape-символы, так что кавычки вокруг "x"
и "abc"
будутинтерпретируется как внутри строки, а не как символ конца строки:
s == "{\"x\":\"abc\"}" // -> true
Так как s
является строкой, вы также можете поместить ее в другой объект, например так:
const bar = { "nested" : s }
И если вы приведете это в соответствие, вы получите еще один уровень экранирования, означающий, что s
является строкой, а не вложенным объектом JSON внутри объекта:
JSON.stringify(bar) == "{\"nested\":\"{\\"x\\":\\"abc\\"}\"}
Итак, ясно, что в вашем приложении вы передаете строки вместо объектов.Например, внутри вашего payload
, json
находится вложенный строковый код JSON, а внутри json
, description
строковый кодированный JSON.
Если вы контролируете сообщение, являющеесяотправленный на этот веб-сокет, то вы должны проанализировать эти строки, прежде чем поместить их в полезную нагрузку.
Например, если вы создаете полезную нагрузку следующим образом:
func sendMessage(ws, action, id, json) {
ws.send(action, {id: id, json: json})
}
, тогда вам следуетизмените его следующим образом:
func sendMessage(ws, action, id, json) {
ws.send(action, {id: id, json: JSON.parse(json)})
}
И так далее, для каждого уровня вложенного объекта.