JSON转Golang Struct

JSON
操作
结果
使用结构体
复制成功

结构体切片完整示例(可直接运行)

package main import ( "encoding/json" "fmt" ) type JSONData struct { Name string `json:"name"` Code int `json:"code"` List []List `json:"list"` } type List struct { Day int `json:"day"` } func main() { var jsonData JSONData // 切片追加结构体元素 jsonData.List = append(jsonData.List, List{1}) jsonData.List = append(jsonData.List, List{2}) // 合并基础结构体赋值 respJson := JSONData{ Code: 1, Name: "小芳", List: jsonData.List, } // 追加新元素 respJson.List = append(respJson.List, List{3}) b, err := json.Marshal(respJson) if err != nil { fmt.Println("JSON ERR:", err) return } fmt.Println("输出JSON字符串:") fmt.Println(string(b)) // 输出结果:{"name":"小芳","code":1,"list":[{"day":1},{"day":2},{"day":3}]} }
复制成功

一、工具功能说明

  • 解析JSON自动生成Golang type结构体,自动添加`json:"字段名"`标签;
  • 两种转换模式:无嵌套扁平结构体、标准嵌套结构体(适配数组嵌套对象);
  • 自动识别类型:string字符串、int数字、bool布尔、数组切片、嵌套对象;
  • 自动生成完整可运行main包代码,包含encoding/json导入、初始化变量;
  • 内置结构体切片追加、合并完整运行示例,直接复制使用;
  • 一键复制结构体代码 / 完整Go源码 / 追加示例代码,复制成功绿色提示;
  • 纯前端JS解析,无需后端,离线本地使用,适用于Go接口开发、JSON绑定结构体。

二、截图默认实例演示

输入JSON

{"name":"小芳","code":404,"list":[{"day":1},{"day":2}]}

点击【转嵌套】生成结构体(右侧结果)

type JSONData struct {
    Name string `json:"name"`
    Code int    `json:"code"`
    List []List  `json:"list"`
}

type List struct {
    Day int `json:"day"`
}

结构体追加逻辑说明

// 1. nil切片直接追加子结构体
jsonData.List = append(jsonData.List, List{1})
// 2. 合并完整结构体赋值
respJson := JSONData{Name:"小芳",Code:1,List:jsonData.List}
// 3. 继续追加新元素
respJson.List = append(respJson.List, List{3})
// 4. 输出序列化JSON
{"name":"小芳","code":1,"list":[{"day":1},{"day":2},{"day":3}]}

三、操作步骤

  1. 左侧文本框粘贴接口返回JSON字符串;
  2. 选择转换模式:【转无嵌套】扁平化所有层级 / 【转嵌套】生成分层结构体;
  3. 右侧输出各层级type结构体定义;底部输出完整main包代码;
  4. 下方内置「结构体切片追加示例」可直接复制,用于数组合并、追加元素;
  5. 点击复制按钮,复制结构体/完整源码/追加示例到项目使用。

四、类型自动映射规则

  • JSON字符串 → Go string
  • JSON数字整数 → Go int
  • JSON小数 → Go float64
  • JSON布尔true/false → Go bool
  • JSON数组 []{}嵌套对象 → Go []结构体

五、结构体追加核心语法

  • 单元素追加:`obj.List = append(obj.List, List{Day:1})`
  • 批量切片合并:`obj.List = append(obj.List, otherList...)`
  • 结构体整体合并覆盖:`newObj = oldObj`
  • 增量合并(仅更新非空字段):单独判断字段赋值,不覆盖原值