Разобрать JSON с пустым строковым полем
Мне нужно разобрать JSON в структуру Go. Ниже приведена структура
type Replacement struct {
Find string `json:"find"`
ReplaceWith string `json:"replaceWith"`
}
Ниже приведен пример json:
{
"find":"TestValue",
"replaceWith":""
}
Входной json может иметь пустые значения для некоторого поля. Го
encoding/json
библиотека по умолчанию принимает значение для любой пустой строки, представленной в JSON. У меня есть подчиненная служба, которая находит и заменяет значения в конфигурациях. Это вызывает проблемы с моей нижестоящей службой, поскольку она не принимает
replaceWith
параметр. У меня есть обходной путь, где я заменяю
nil
значения по
"''"
но это может вызвать проблему, когда некоторое значение заменяется на
''
. Есть ли способ для json не анализировать пустую строку как nil и просто
""
Вот ссылка на код: https://play.golang.org/p/SprPz7mnWR6
2 ответа
Строковый тип Go не может содержать
nil
значение, которое является нулевым значением для указателей, интерфейсов, карт, срезов, каналов и типов функций, представляющих неинициализированное значение.
При распаковке данных JSON для структуры, как в вашем примере
ReplaceWith
поле действительно будет пустой строкой (
""
) - это именно то, что вы просите.
type Replacement struct {
Find string `json:"find"`
ReplaceWith string `json:"replaceWith"`
}
func main() {
data := []byte(`
{
"find":"TestValue",
"replaceWith":""
}`)
var marshaledData Replacement
err := json.Unmarshal(data, &marshaledData)
if err != nil {
fmt.Println(err)
}
if marshaledData.ReplaceWith == "" {
fmt.Println("ReplaceWith equals to an empty string")
}
}
Вы можете использовать указатель в строке, и если значение отсутствует в JSON, оно будет равно нулю. Я делал то же самое в прошлом, но в настоящее время у меня нет кода.