Go에서 JSON을 객체 배열로 역마샬링
JSON 객체를 사용자 정의 구조체 배열로 구문 분석하는 동안 문제가 발생합니다. . 하지만 제공하신 JSON은 최상위 개체의 키-값 쌍 사이에 쉼표가 없기 때문에 잘못된 것으로 보입니다. 수정되고 형식이 지정된 JSON은 다음과 같습니다.
{ "1001":{ "level":10, "monster-id":1001, "skill-level":1, "aimer-id":301 }, "1002":{ "level":12, "monster-id":1002, "skill-level":1, "aimer-id":302 }, "1003":{ "level":16, "monster-id":1003, "skill-level":2, "aimer-id":303 } }
JSON 언마샬링으로 인한 결과 맵을 인터페이스에 할당했기 때문에 JSON을 구문 분석하려는 초기 시도에서 오류가 발생했습니다.{} 값. 이 맵을 인덱싱할 때 v.(map[string]interface{})를 사용하여 값을 다시 입력하고 맵에서 키를 검색할 때마다 입력해야 합니다.
또한 int 삽입을 시도했습니다. 문자열을 키로 사용하는 맵의 키로 사용하면 추가 오류가 발생할 수 있습니다.
간소화하려면 언마샬링 프로세스를 수행하고 수동 유형 어설션을 피하려면 대상 데이터 유형으로 직접 언마샬링을 제공하는 기술을 사용할 수 있습니다. 업데이트된 예는 다음과 같습니다.
package main import ( "encoding/json" ) type Monster struct { MonsterId int32 `json:"monster-id"` Level int32 `json:"level"` SkillLevel int32 `json:"skill-level"` AimerId int32 `json:"aimer-id"` } type MonsterCollection struct { Pool map[string]Monster } func (mc *MonsterCollection) FromJson(jsonStr string) error { var data = &mc.Pool b := []byte(jsonStr) return json.Unmarshal(b, data) } func main() { jsonString := `{ "1001":{ "level":10, "monster-id":1001, "skill-level":1, "aimer-id":301 }, "1002":{ "level":12, "monster-id":1002, "skill-level":1, "aimer-id":302 }, "1003":{ "level":16, "monster-id":1003, "skill-level":2, "aimer-id":303 } }` mc := MonsterCollection{} if err := mc.FromJson(jsonString); err != nil { // Handle error } for _, monster := range mc.Pool { // Access monster data here } }
위 내용은 JSON을 Go 구조체 배열로 효율적으로 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!