Используя Go, как я могу разархивировать строку JSON, содержащую непечатаемые символы ASCII?
Например
testJsonString := "{\"test_one\" : \"123\x10456\x0B789\v123\a456\"}"
var dat map[string]interface{}
err := json.Unmarshal([]byte(testJsonString), &dat)
if err != nil {
panic(err)
}
Урожайность:
panic: invalid character '\x10' in string literal
goroutine 1 [running]:
main.main()
/tmp/sandbox903140350/main.go:14 +0x180
https://play.golang.org/p/mFGWzndDK8V
К сожалению, я не могу контролировать исходные данные, поэтому мне нужен способ игнорировать или вырезать непечатные символы.
Аналогичным образом, еще одна проблема с данными, с которой я сталкиваюсь, - это удаление нескольких E escape-последовательностей, таких как \ 0 и \ a. Если я заменю строку, указанную выше, на эту строку, приведенную ниже, программа также завершится ошибкой. По существу это также терпит неудачу на любой escape-последовательности C https://en.wikipedia.org/wiki/Escape_sequences_in_C
testJsonString := "{\"test_one\" : \"123456789\\a123456\"}"
выдаст ошибку с
panic: invalid character 'a' in string escape code
goroutine 1 [running]:
main.main()
/tmp/sandbox322770276/main.go:12 +0x100
Похоже, что он также не может быть демарширован, но не может быть экранирован путем проверки номера руны или проверки юникода (поскольку Go, по-видимому, обрабатывает его как обратную косую черту, за которой следует символ «a», которые оба являются юридическое)
Есть ли хороший способ справиться с этими крайними случаями?