How to Unmarshal Nested JSON into an Array of Objects in Go?

Barbara Streisand
Release: 2024-11-25 10:59:14
Original
341 people have browsed it

How to Unmarshal Nested JSON into an Array of Objects in Go?

Unmarshaling Nested JSON into Array of Objects in Go

Problem

Consider the following JSON data:

{
   "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
   }
}
Copy after login

The goal is to unmarshal this JSON into an array of Monster objects.

type Monster struct {
    MonsterId  int32
    Level      int32
    SkillLevel int32
    AimerId    int32
}
Copy after login

Solution

To achieve this, follow these steps:

  1. Define MonsterCollection: Create a MonsterCollection type to hold a map of Monster objects with string keys.
type MonsterCollection struct {
    Pool map[string]Monster
}
Copy after login
  1. Implement FromJson Method: Define a FromJson method on the MonsterCollection type to handle the unmarshaling.
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
Copy after login
  • Using var data *map[string]Monster avoids the use of interface{}, ensuring that the resulting map has the desired type.
  • Passing data as a pointer ensures that the changes made during unmarshaling are reflected in the MonsterCollection's Pool field.
  1. Correct Key Type in Pool: Change the key type of the Pool map to string to match the keys in the JSON data.
  2. Use Struct Tags: Add JSON struct tags to the Monster struct to specify the field names in the JSON data.
type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}
Copy after login
  1. Call FromJson: Call the FromJson method with the JSON string to unmarshal the data into the MonsterCollection.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
Copy after login
  1. Check for Errors: Handle any errors returned by FromJson for debugging purposes.
  2. Access the Objects: Use the Pool field of the MonsterCollection to access the individual Monster objects.
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}
Copy after login

By following these steps, you can successfully unmarshal the nested JSON data into an array of Monster objects in Go.

The above is the detailed content of How to Unmarshal Nested JSON into an Array of Objects in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template