>시스템 튜토리얼 >리눅스 >json 데이터의 직렬화 및 역직렬화

json 데이터의 직렬화 및 역직렬화

王林
王林앞으로
2024-01-09 11:30:174343검색
소개 json의 전체 이름은 Javascript 개체 표기법이고 전체 중국어 이름은 js 개체 표기법입니다. 직렬화 및 역직렬화 프로토콜 중에는 json, xml, yaml, 프로토콜 버퍼 등이 있습니다. 그 중 json은 프론트엔드와 백엔드 API 계약 데이터의 주요 전송 형식이다. json은 숫자 값, 부울 값, 배열 및 객체의 네 가지 데이터 유형을 지원합니다. 이 네 가지 데이터 유형을 사용하면 복잡한 데이터 모델을 구축할 수 있습니다.

Go 언어에서는 json 표준 라이브러리를 사용하여 데이터 직렬화 및 역직렬화를 구현할 수 있습니다. 이 라이브러리는 맵, 구조, 배열, 슬라이스 및 내장 기본 데이터 유형을 직렬화 및 역직렬화하는 편리한 방법을 제공합니다. json 표준 라이브러리를 사용하면 데이터를 json 형식으로 쉽게 변환하고 필요할 때 원래 데이터 유형으로 다시 구문 분석할 수 있습니다. 이는 데이터 처리에 있어 매우 편리한 기능을 제공합니다.

여기에서는 json 사용을 설명하기 위해 세 가지 예를 들어 보겠습니다. 초보자의 경우 하나의 구조 개체만 사용하여 데이터를 주고받는 경우가 많습니다. 아래에서 구체적인 예를 살펴보겠습니다. 1. 구조 객체를 사용하여 데이터를 수신합니다. ```` 유형 사람 구조체 { 이름 문자열 `json:"name"` 연령 int `json:"age"` } 기능 메인() { data := `{"name": "앨리스", "age": 25}` var p 사람 오류 := json.Unmarshal([]byte(data), &p) 오류가 있는 경우 != nil { fmt.Println("json을 구문 분석하지 못했습니다:", err) 반품

json 데이터의 직렬화 및 역직렬화

구조

유형 사람 구조체 {<br> 이름 문자열 `json:"name"`<br> Age int `json:"age"`<br> }
<br> func 메인() {<br> var (<br> new인당<br> 방탄소년단 []바이트<br> )<br> 당:=사람{<br> 이름: "릴리",<br> 나이: 29,<br> }<br> // 직렬화<br> BTS인 경우 err = json.Marshal(per) err !=nil{<br> 로그.치명적(err.Error())<br> 복귀<br> }
<br> if err = json.Unmarshal(bts, &newPer); err !=nil{<br> 로그.치명적(err.Error())<br> 복귀<br> }<br> fmt.Println(newPer)<br> }

지도

func main() {<br> var (<br> smap = 맵[문자열]int{<br> "나이": 28,<br> "섹스": 1,<br> "층": 12,<br> }<br> newSmap = make(map[string]int)<br> 방탄소년단 []바이트<br> )<br> BTS인 경우 err = json.Marshal(smap) err !=nil {<br> 로그.치명적(err.Error())<br> 복귀<br> }<br> if err = json.Umarshal(bts, &newSmap); err !=nil {<br> 로그.치명적(err.Error())<br> 복귀<br> }<br> fmt.Println(newSmap)<br> }

동적 배열 배열 또는 슬라이스

func main() {<br> var (<br> 연령 []int = []int{23, 20, 28, 25, 30}<br> 방탄소년단 []바이트<br> 오류 오류<br> newAges = make([]int, len(연령))<br> )<br> BTS인 경우 err = json.Marshal(ages) err != nil {<br> fmt.Println(err.Error())<br> 복귀<br> }<br> if err = json.Unmarshal(bts, &newAges); err != nil {<br> fmt.Println(err.Error())<br> 복귀<br> }<br> fmt.Println("새로운 시대: ", newAges)<br> 복귀<br> }
초보자는 json 직렬화 및 구조 역직렬화에 대해 상대적으로 명확하지만 후자의 두 가지를 거의 또는 전혀 사용하지 않을 수 있습니다.

  • 배열 유형 데이터의 경우 일부 프런트 엔드는 비즈니스 시나리오에서 이를 사용합니다.
  • 지도 유형의 경우 일반적으로 Go 언어 서버에서 타사 REST 인터페이스가 호출될 때 서버는 호출 성공 여부를 결정하기 위해 지정된 반환 코드만 원합니다. 프로그래머는 전체 구조체 구조 정의를 작성하고 싶지 않았거나 게을러서 반환 데이터를 수신하기 위해 map[string]interface{}를 사용했습니다. 이때 json 표준 라이브러리에서 Unmarshal을 통해 deserialize한 후 map["err_code"].(int)를 통해 반환 코드를 얻은 후 기타 후속 처리 로직을 수행한다.

여기서는 구조를 사용할 때 가끔 사용하는 기능에 대해서도 설명하고 싶습니다. 구조의 json에서 지원하는 태그 값 기능은 다음과 같습니다.
Person 구조체 유형 {<br> 이름 문자열 `json:"name,omitempty"`<br> Age int `json:"age"`<br> }<br> 이는 함수 생략의 태그 값이 설정되었을 때 해당 구조의 데이터 요소 값이 0이면 출력되지 않는다는 의미입니다. 즉, 서버에서 반환한 구조 데이터의 요소가 비어 있고 이 요소가 프런트엔드에 반환되지 않는 경우 생략이라는 json 태그 값 속성을 사용할 수 있습니다.

Didi Company의 수석 엔지니어 Taowen이 작성한 세계에서 가장 빠른 json 파싱 라이브러리를 제공합니다. 깃허브 주소: jsoniter.

이 기사는 오픈 소스 중국 커뮤니티 [http://www.oschina.net]에서 재인쇄되었습니다.

위 내용은 json 데이터의 직렬화 및 역직렬화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 linuxprobe.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제