MST

星途 面试题库

面试题:Go语言json包处理多层嵌套且含数组的结构

有如下嵌套结构体:type Root struct { Middle []struct { Inner struct { ID int `json:"id"` Name string `json:"name"` } `json:"inner"` } `json:"middle"` },要求实现一个函数,接收一个JSON字节切片,将其反序列化为Root结构体实例,并且如果反序列化过程中遇到错误,要返回详细的错误信息,同时实现将Root结构体实例序列化为JSON字符串的功能,在序列化时,确保JSON字符串格式化输出。
43.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "encoding/json"
    "fmt"
)

type Root struct {
    Middle []struct {
        Inner struct {
            ID   int    `json:"id"`
            Name string `json:"name"`
        } `json:"inner"`
    } `json:"middle"`
}

// UnmarshalJSON 反序列化 JSON 字节切片为 Root 结构体实例
func UnmarshalJSON(data []byte) (Root, error) {
    var root Root
    err := json.Unmarshal(data, &root)
    if err != nil {
        return root, fmt.Errorf("反序列化错误: %v", err)
    }
    return root, nil
}

// MarshalJSON 将 Root 结构体实例序列化为格式化的 JSON 字符串
func MarshalJSON(root Root) (string, error) {
    bytes, err := json.MarshalIndent(root, "", "  ")
    if err != nil {
        return "", fmt.Errorf("序列化错误: %v", err)
    }
    return string(bytes), nil
}