ЈСОН (ЈаваСцрипт Објецт Нотатион) је веома свестран и веома популаран формат података. Често се користи за комуникацију између веб апликација и као погодан начин за складиштење великих количина структурираних података апликације.

ЈСОН је толико користан да скоро сви савремени програмски језици пружају уграђену подршку за рад са њим, укључујући Го.

Рад са ЈСОН-ом у Го

Већину посла који ћете обавити са ЈСОН-ом можете поделити у две опште категорије: распоређивање и разврставање. Википедиа дефинише маршалирање као:

У рачунарској науци, марширање је процес трансформације меморијске репрезентације објекта у формат података погодан за складиштење или пренос. Обично се користи када се подаци морају премештати између различитих делова рачунарског програма или из једног програма у други.

Једноставније речено, марширање је процес претварања података ускладиштених у променљивој у облик који је лакше пренети другом програму. Унмарсхалинг је обрнут процес: укључује узимање података форматираних за транспорт и њихово претварање у облик који је лакши за коришћење вашем програму.

instagram viewer

Користећи Го, можете да маршалирате изворне структуре података у ЈСОН. А можете извршити и обрнуту радњу, демарсхалинг ЈСОН података у Го променљиве.

Усклађивање у ЈСОН у Го

Го пружа кодирање/јсон пакет да вам олакша рад са ЈСОН-ом. Овај пакет садржи неколико функција, али она коју ћете користити за маршалирање је маршал функција. маршал има следећи потпис функције:

Функ Маршал (в интерфејс{}) ([]бајт, грешка)

То значи да маршал прихвата параметар било ког типа података и враћа две вредности: део бајтова и грешку. Другим речима, ви зовете маршал са Го вредношћу и конвертује је у ЈСОН и враћа ЈСОН еквивалент. Ако наиђе на грешку током процеса конверзије, вратиће грешку и празан део.

Ево примера кода који користи маршал да конвертујете мапу у ЈСОН. Да бисте покренули овај пример, све што вам треба је да креирате Го датотеку ваш омиљени уређивач кодова, или користите Иди игралиште:

пакет главни

увоз (
"кодирање/јсон"
"фмт"
)

фунц главни(){
вал := мапа[стринг]инт{
"јохн": 25,
"мари": 19,
"адам": 5,
}

рес, _ := јсон. маршал (вал)
фмт.Принтлн(низ(рес))
}

Ако покренете тај код, он ће исписати следеће:

Као што је раније поменуто, можете маршалирати било коју врсту Го података у ЈСОН, иако ћете у стварном животу обично распоређивати структуре. Због тога, Го пружа функцију која се зове структурне ознаке која вам омогућава да дате маршал додатна упутства за конвертовање ваших структура.

Ознака структуре је стринг који укључите у своју декларацију структуре поред типа података поља. Ознаке структуре вам омогућавају да прилагодите начин маршал третира поље коме ознака припада. Можете да користите струцт ознаке да бисте преименовали поље у ЈСОН излазу или га чак потпуно изоставили. Ознаке структуре (то маршал препознаје) почети са поднизом "јсон:".

Као пример, рецимо да имате структуру Ауто који представља неке информације о аутомобилу. Ево кода за креирање а Ауто и распоредите га у ЈСОН:

пакет главни

увоз (
"кодирање/јсон"
"фмт"
)

фунц главни(){
тип Конструкција аутомобила {
Бренд стринг
Модел стринг
Цена инт
}
вал := Ауто{Бренд: "Мерцедес", Модел: "Бенз", Цена: 50000}
рес, _ := јсон. маршал (вал)
фмт.Принтлн(низ(рес))
}

Овај код производи излаз:

Тхе Марка, Модел, и Цена поља оф Ауто треба почети великим словима, или маршал неће моћи да их конвертује. Ово доводи до тога да ЈСОН излазна поља такође почињу великим словима. Али шта ако желите да имена почињу малим словима у ЈСОН-у или ако желите да у потпуности преименујете поље? Ту долазе ознаке структуре. Ево примера:

пакет главни
увоз (
"кодирање/јсон"
"фмт"
)
фунц главни(){
тип Конструкција аутомобила {
ИД инт `јсон:"-"`
Стринг бренда `јсон:"тип"`
Модел стринг `јсон:"модел"`
Цена инт `јсон:"Цена"`
}
вал := Ауто{ИД: 0, Бренд: "Мерцедес", Модел: "Бенз", Цена: 50000}
рес, _ := јсон. маршал (вал)
фмт.Принтлн(низ(рес))
}

Овај код уводи ново ИД поље које маршал изоставља из ЈСОН излаза преко ознаке структуре. Код такође користи струцт ознаке за преименовање других поља структуре. Ево излаза програма:

Као што видите, део струцт ознаке након „јсон:“ постаје име поља у Маршаловом излазу. Постоји један изузетак: ако је то стринг "-", Маршал изоставља то поље из излаза. Можете прочитати више о Марсхал и струцт ознакама у Иди на документацију.

Демарсхалинг фром ЈСОН ин Го

Енцодинг/јсон пакет такође пружа функцију демарсхалинга, тзв Унмарсхал. Има следећи потпис функције:

фунц Унмарсхал (подаци []бајт, в интерфејс{}) грешка

за разлику од маршал, Унмарсхал не враћа вредност. Уместо тога, прихвата ЈСОН као део бајтова у првом аргументу, а затим складишти конвертоване податке у објекат на који указује његов други аргумент. Унмарсхал ради и са струцт ознакама, али овде, ознаке говоре Унмарсхал која ЈСОН поља одговарају са којим пољима структуре.

Када демарсхалинг у програму, можете преузимање података из АПИ-ја, али овде ћете користити лажне податке. Ево како користите Унмарсхал:

пакет главни

увоз (
"кодирање/јсон"
"фмт"
)

фунц главни(){
тип Конструкција аутомобила {
ИД инт `јсон:"-"`
Стринг бренда `јсон:"тип"`
Модел стринг `јсон:"модел"`
Цена инт `јсон:"Цена"`
}

јсонИнпут := `{
"тип": "Тоиота",
"модел": "Цамри",
"Цена": 2000
}`

вар јсонОутпут Цар
ерр := јсон. Унмарсхал([]бајт(јсонИнпут), &јсонОутпут)

ако грешка != нил {
фмт. Принтлн("Грешка декодирања ЈСОН-а!")
повратак
}

фмт.Принтлн(јсонОутпут)
}

Овај код користи исти тип аутомобила као и претходни пример и демаршује ЈСОН објекат у структуру типа Цар, а затим штампа податке у структури. Када се покрене, програм производи овај излаз:

Ово показује да су лажни ЈСОН подаци успешно раздвојени у јсонОутпут струцт.

Го олакшава рад са ЈСОН-ом

Са пакетом енцодинг/јсон, рад са ЈСОН-ом у Го-у је једноставан као два позива функције: Марсхаланд Унмарсхал. Го вам такође омогућава да прилагодите процес разврставања/раздруживања ЈСОН-а помоћу струцт ознака.

Конвертовање података у ЈСОН је одличан начин да их делите са другим програмом или процесом. Формат је толико универзалан да је ЈСОН преносив колико год може.