> 백엔드 개발 > Golang > JSON을 Go 구조체 배열로 효율적으로 역정렬화하는 방법은 무엇입니까?

JSON을 Go 구조체 배열로 효율적으로 역정렬화하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-02 10:11:14
원래의
775명이 탐색했습니다.

How to Efficiently Unmarshal JSON into an Array of Go Structs?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿