GO_INTERVIEW_LIB Telegram 587
💬 Как 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 предпочтёт последнее значение.
👍161🥰1



tgoop.com/go_interview_lib/587
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

SUCK Channel Telegram As of Thursday, the SUCK Channel had 34,146 subscribers, with only one message dated August 28, 2020. It was an announcement stating that police had removed all posts on the channel because its content “contravenes the laws of Hong Kong.” On June 7, Perekopsky met with Brazilian President Jair Bolsonaro, an avid user of the platform. According to the firm's VP, the main subject of the meeting was "freedom of expression." Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019. Your posting frequency depends on the topic of your channel. If you have a news channel, it’s OK to publish new content every day (or even every hour). For other industries, stick with 2-3 large posts a week.
from us


Telegram Библиотека Go для собеса | вопросы с собеседований
FROM American