Чтобы дать некоторый фон, я читаю журналы устройств с устройств Android и ios, используя adb logcat и idevicesyslog. Конкретные журналы, которые мне нужны, — это словари swift/c#/java/etc, преобразованные в строки через adb logcat/idevicesyslog. Я надеюсь взять эти журналы, содержащие строки, подобные JSON, и преобразовать их в действительный JSON. Это работает по большей части без проблем.
Однако иногда эти журналы/строковые выходные данные содержат такие символы, как (\134, \M, \t и т. д.), которые вызывают проблемы при распаковке в JSON. Я распаковываю их в JSON, чтобы отправить в другое место.
Например, необработанный журнал устройства может иметь что-то вроде следующего: {"foo":"bar","foo":"bar\134/\134/bar\134/bar\134/bar"} {"foo": "бар","foo":"бар\М/\134/бар\134/бар\М/бар"}
Это приводит к таким ошибкам, как «паника: недопустимый символ 'M' в escape-коде строки» при попытке демаршалировать
Большинство журналов не содержат этих символов, так что это не проблема. Однако некоторые крайние случаи содержат их, и это создает проблемы.
Есть ли правильное название для этих типов персонажей? (escape-символы С#?) Есть ли пакет golang, который может удалить их из строки? В настоящее время я просто удаляю те, с которыми сталкиваюсь, если они появляются в строке, но мне кажется, что есть лучший способ сделать это. Добавление тех, с которыми я сталкиваюсь, в список удаляемых символов не является хорошей практикой.
Подвести итоги,
Журнал idevicesyslog дает мне такую строку: {"foo":"bar","foo":"bar\134/\134/bar\134/bar\134/bar"}
Это не может быть unmarshalled.
Журнал idevicesyslog дает мне такую строку: {"foo":"bar","foo":"bar bar bar bar"}
Это может быть неупорядочено.
Текущее решение: добавить новые, с которыми я сталкиваюсь, в список и удалить их перед демаршалингом.
Обнадеживающее решение: автоматически обнаруживать и удалять
err = json.Unmarshal([]byte(s), &metadataMap)
- person Steve   schedule 20.01.2019\nnn
(т.е. восьмеричные escape-последовательности в стиле C), я бы предложил использовать регулярное выражение для замены обратной косой черты, за которой следуют три цифры, но наличие\M
означает, что это не будет работать для всех строк, и на самом деле это не стандартный побег, с которым я сталкивался, поэтому вам может потребоваться просто вести список побегов, которые нужно заменить. - person lmars   schedule 20.01.2019func replaceSpChar(s string) string { var jsonStr = s specialChar := strings.Contains(jsonStr,
\134) if specialChar { jsonStr = strings.Replace(jsonStr,
\134, "", -1) } return jsonStr }
просто нужно создать список всех. - person Steve   schedule 20.01.2019strings.Replace(str, "\\", "\\\\", -1)
- person Steve   schedule 20.01.2019