prosource

json 개체의 문자열을 여러 유형에 매핑하시겠습니까?

probook 2023. 3. 19. 18:20
반응형

json 개체의 문자열을 여러 유형에 매핑하시겠습니까?

다음과 같은 json 객체로 변환할 수 있는 맵을 만들고 싶다.

{
   "a": "apple",
   "b": 2
}

but golang은 맵을 타입으로 선언하도록 지정하기 때문에 map[string]string 또는 map[string]int를 지정할 수 있습니다.위와 같은 json 객체를 작성하려면 어떻게 해야 하나요?

주의: 실행 시 또는 json 개체를 생성해야 할 때까지 필요한 데이터 및/또는 유형을 알 수 없습니다.그래서 그냥 그런 오브젝트를 만들 수는 없어요

type Foo struct {
    A string `json:"a"`
    B int `json:"b"`
}

언제든지 사용할 수 있습니다.interface{}모든 유형을 저장할 수 있습니다.의 매뉴얼로서encoding/json패키지 내용:

JSON을 인터페이스 값으로 변환 해제하기 위해 Unmarshal은 JSON을 인터페이스 값에 포함된 구체적인 값으로 변환합니다.인터페이스 값이 제로인 경우, 즉 구체적인 값이 저장되지 않은 경우 Unmarshal은 다음 중 하나를 인터페이스 값에 저장합니다.

Bool, JSON Boallans
float64, JSON 번호용
문자열, JSON 문자열용
[]interface{}, JSON 어레이용
맵[string]인터페이스{}, JSON 오브젝트용
JSON의 null일 경우 null

다음 작업을 수행합니다.

m := map[string]interface{}{"a":"apple", "b":2}

코멘트에 응답하려면 Map과 Slice에 대한 유형 정의를 추가하는 것이 더 쉽다고 생각합니다.그러면 복잡한 리터럴 선언에 대해 걱정할 필요가 없습니다.

package main
import "fmt"

type Map map[string]interface{}
type Slice []interface{}

func main() {
   m := Map{
      "a": "apple",
      "b": 2,
      "c": Slice{"foo", 2, "bar", false, Map{"baz": "bat", "moreFoo": 7}},
   }
   fmt.Println(m)
}

https://golang.org/ref/spec#Type_definitions

언급URL : https://stackoverflow.com/questions/18526046/mapping-strings-to-multiple-types-for-json-objects

반응형