Home  >  Article  >  Backend Development  >  How can I unmarshal JSON data and store it in a structure in Go

How can I unmarshal JSON data and store it in a structure in Go

PHPz
PHPzforward
2024-02-11 19:48:08772browse

我如何解组 JSON 数据并将其存储在 Go 中的结构中

php editor Strawberry shares a method of unpacking JSON data and storing it in a Go language structure. JSON is a commonly used data exchange format, and the Go language provides a convenient toolkit for parsing and processing JSON data. By using the "json" package built into the Go language, we can easily decompose JSON data into corresponding structures, store and process it. This method is simple and easy to understand, and can help developers process JSON data efficiently and improve development efficiency. Below we will introduce in detail how to use Go language to unmarshal JSON data and store it in a structure.

Question content

This is the json test data I stored using go struct in the program

[
  {
    "id": 393,
    "question": "the \"father\" of mysql is ______.",
    "description": null,
    "answers": {
      "answer_a": "bill joy",
      "answer_b": "stephanie wall",
      "answer_c": "bill gates",
      "answer_d": "michael widenius",
      "answer_e": null,
      "answer_f": null
    },
    "multiple_correct_answers": "false",
    "correct_answers": {
      "answer_a_correct": "false",
      "answer_b_correct": "false",
      "answer_c_correct": "false",
      "answer_d_correct": "true",
      "answer_e_correct": "false",
      "answer_f_correct": "false"
    },
    "correct_answer": "answer_a",
    "explanation": null,
    "tip": null,
    "tags": [
      {
        "name": "mysql"
      }
    ],
    "category": "sql",
    "difficulty": "medium"
  }
]

This is the function I wrote to store the data but I can't get the correct response instead of getting a blank structure when printing

func FetchQuiz(num int, category string) {
    // write code to read json file
    jsonFile, err := os.Open("test.json")
    if err != nil {
        fmt.Println(err)
    }
    defer jsonFile.Close()

    byteValue, _ := ioutil.ReadAll(jsonFile)

    fmt.Println(string(byteValue))

    type Data struct {
        ID          int
        Question    string
        Description string
        Answers     struct {
            A string
            B string
            C string
            D string
            E string
            F string
        }
        MultipleCorrectAnswers string
        CorrectAnswers         struct {
            A string
            B string
            C string
            D string
            E string
            F string
        }

        CorrectAnswer string
        Explanation   string
        Tip           string
        Tags          []struct {
            Name string
        }
        Category   string
        Difficulty string
    }

    var QuizList2 []Data

    if err := json.Unmarshal(byteValue, &QuizList2); err != nil {
        fmt.Println(err.Error())
    }

    fmt.Println(QuizList2)

But the response is [{393 The "father" of mysql is ______. { } { } [{mysql}] sql medium}]I have tried everything to solve it but no response is reached

solution

json fieldanswer_a It will not be mapped to the go field a alone.

Change the name of the go field to match the name of the json field (ignoring case):

answer_a string

Or use go struct tag in your fields:

A string `json:"answer_a"`

Do the same for the remaining go fields that don't match the corresponding json field.

The above is the detailed content of How can I unmarshal JSON data and store it in a structure in Go. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete