tgoop.com/go_interview_lib/587
Last Update:
💬 Как json.Unmarshal
обрабатывает совпадения ключей в JSON при разном регистре, и какой результат будет при наличии нескольких ключей, отличающихся только регистром?
Функция json.Unmarshal
при декодировании JSON-сообщений в структуру Go сначала пытается найти точное совпадение ключа. Если точное совпадение не найдено, она принимает ключи, совпадающие с именем поля структуры без учёта регистра.
Если в JSON присутствуют несколько ключей, которые отличаются только регистром, json.Unmarshal
выберет последнее упомянутое значение с учётом регистра. Например, если в JSON имеются ключи "HTML"
и "html"
, то при декодировании в поле HTML
структуры будет записано значение из последнего из них.
В приведённом ниже коде JSON содержит два ключа "HTML"
и "html"
с разными значениями, но функция Unmarshal
записывает значение из последнего ключа ("bar"
) в поле HTML
структуры:
package main
import (
"encoding/json"
"fmt"
)
type T struct {
HTML string `json:"HTML"`
}
var s = `{"HTML": "foo", "html": "bar"}`
func main() {
var t T
if err := json.Unmarshal([]byte(s), &t); err != nil {
fmt.Println(err)
return
}
fmt.Println(t.HTML) // bar
}
Таким образом, при наличии нескольких ключей с одинаковым именем, но разным регистром,
json.Unmarshal
предпочтёт последнее значение.BY Библиотека Go для собеса | вопросы с собеседований
Share with your friend now:
tgoop.com/go_interview_lib/587