Кодирование JSON-тегов в го - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь изменить кодировку в json, и использовал обе кодировки / json и jsoniter.Что я пытаюсь сделать, так это то, что если я предоставлю язык, он будет кодировать соответствующие имена полей как «name @ lang» вместо «name».Я попытался сделать следующее:

func registerFieldEncoder(field string) {
encoderFunc := func(p unsafe.Pointer, stream *jsoniter.Stream) {
    fmt.Print("test")
    str := *(*string)(unsafe.Pointer(p))
    newstr := str + "@sv"
    stream.WriteString(newstr)
}
isEmptyFunc := func(p unsafe.Pointer) bool {
    str := *(*string)(unsafe.Pointer(p))
    return len(str) == 0
}
jsoniter.RegisterTypeEncoderFunc(field, encoderFunc, isEmptyFunc)
jsoniter.RegisterFieldEncoderFunc("", field, encoderFunc, isEmptyFunc) }

Поле представляет тег json, т. Е.

`json:"field`

Возможно ли это сделать на ходу?

1 Ответ

0 голосов
/ 29 ноября 2018

Unmarshall json как map[string]interface{}

написать функцию, которая возвращается в map[string]interface в поисках ключей с именем "name"

скопировать эти ключи в "name @ lang" вту же карту, а затем удалите ключ «name»

Маршалл измененную карту снова

...