JSON Marshal
Из этой темы мы узнаем:
-
Что такое JSON.
-
Как преобразовать данные в JSON.
-
Как обрабатывать и преобразовывать типы данных.
-
Как и зачем использовать теги структуры.
-
Как работать с map.
Важно! Код, над которым ты будешь работать по мере прохождения темы, необходимо разместить по пути module2/stl/json/homework.
Что такое JSON
JSON — это текстовый формат обмена данными, который в основном используется между браузерами и серверами. В этой статье мы рассмотрим API кодирования и декодирования текста в формат JSON.
JSON (JavaScript Object Notation) — один из самых популярных форматов обмена данными в интернете. Это формат с кодировкой текста, что означает, что данные JSON представляют собой строку символов, записанную в допустимом формате JSON. Ты можешь следовать формату JSON из документации RFC 7159.
Приведенный ниже пример является валидным форматом JSON, однако тебе может потребоваться сначала преобразовать данные в тип данных string, чтобы работать с API JSON.
Формат JSON был создан как средство для передачи данных между браузером и сервером, которые можно легко закодировать из объекта JavaScript или декодировать в объект JavaScript механизмом JavaScript. Следовательно, данные JSON выглядят точно так же, как объект JavaScript, но в string формате.
Объект JSON, как указано выше, является допустимым объектом JavaScript. Ты можешь вставить эти данные JSON в консоль движка JavaScript, и JavaScript создаст из них действительный объект в JavaScript.
В JavaScript мы можем использовать встроенную функцию JSON.parse(json_string) для преобразования строки JSON в объект JavaScript. Если мы хотим отправить объект JavaScript на сервер, мы можем использовать функцию JSON.stringify(js_object), которая возвращает строку JSON.
При отправке данных JSON на сервер нам не обязательно преобразовывать текстовые данные JSON в файл string. Мы можем передавать данные JSON в виде двоичных данных с application/json( MIME Type ) в качестве значения заголовка Content-Type. Сервер может правильно обрабатывать эти данные, просматривая это значение заголовка.
Как мы видим, формат JSON похож на структуру данных Map (Object в случае JavaScript или Dictionary в случае Python или map в Golang) с ключами и значениями. Ключ JSON — это строго string, а значение может быть любым поддерживаемым типом данных.
Формат JSON поддерживает в основном шесть типов данных, string, number, boolean, null, array и object. В JavaScript все эти типы данных являются допустимыми типами данных, однако в других языках могут быть различия, и программе может потребоваться привести неподдерживаемый тип данных к поддерживаемому значению.
Тип number данных в JavaScript может представлять как целые числа signed/unsigned, так и числа с плавающей запятой. Значение null на самом деле это не тип данных, а пустое значение, которое может быть преобразовано в иное пустое значение, поддерживаемое языком, например nil, в случае Go.
Приведенный выше пример также является допустимым форматом JSON. JSON может представлять собой словарь или список, а элементы могут быть любых поддерживаемых типов данных. Когда данные JSON будут декодированы, они преобразуются в array JavaScript или любую поддерживаемую List структуру данных на других языках и наоборот.
В Go самое близкое к представлению JSON, которое мы можем получить, — это сквозные map или struct типы данных. Обе эти структуры данных могут хранить сложные данные парами key:value.
При декодировании строки JSON нам нужен контейнер, который может хранить данные JSON в допустимом типе данных, в таком как map или struct, чтобы мы могли идиоматически обращаться к данным JSON. Аналогичным образом, при кодировании данных JSON нам нужен объект типа map или struct , который можно преобразовать в действительный формат JSON.
Давай углубимся в API, предоставляемый языком Go для кодирования и декодирования данных JSON. Go предоставляет API кодирования/декодирования JSON из пакета encoding/json.