go新人求助一个问题

skykful · 2023-09-05 23:37:46 · 2940 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-09-05 23:37:46 的主题,其中的信息可能已经有所发展或是发生改变。

1693928149021.jpg 我要怎么给引入的三方库结构体添加json格式化时候的小写字段呢,除了自己定义之外。谢谢各位。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2940 次点击  
加入收藏 微博
10 回复  |  直到 2023-12-20 15:38:05
SimonFans
SimonFans · #1 · 2年之前

type Person1 struct { Name string json:"name" Age int json:"age" }

GGXXLL
GGXXLL · #2 · 2年之前

要么自定义结构体,把 Person 转成自己要的。要么自己用 reflect 实现一个 Marshal 方法。

skykful
skykful · #3 · 2年之前
GGXXLLGGXXLL #2 回复

要么自定义结构体,把 `Person` 转成自己要的。要么自己用 `reflect` 实现一个 `Marshal` 方法。

好的,谢谢。

skykful
skykful · #4 · 2年之前
SimonFansSimonFans #1 回复

type Person1 struct { Name string `json:"name"` Age int `json:"age"` }

也是可以的

jan-bar
jan-bar · #5 · 2年之前

三方库解君愁

package main

import (
    "fmt"
    "strings"

    jsoniter "github.com/json-iterator/go"
    "github.com/json-iterator/go/extra"
)

func main() {
    err := test()
    if err != nil {
        panic(err)
    }
}

func test() error {
    type Person struct {
        Name string
        Age  int
    }

    type Student struct {
        Person
        School string `json:"school"`
        Grade  string `json:"grade"`
    }

    extra.SetNamingStrategy(strings.ToLower) // 设置名称转换规则

    json := jsoniter.ConfigCompatibleWithStandardLibrary

    s1 := new(Student)
    s1.Name = "张三"
    s1.Age = 20
    s1.School = "家里蹲大学"
    s1.Grade = "本科"

    b, err := json.Marshal(s1)
    if err != nil {
        return err
    }
    fmt.Println(string(b))
    return nil
}

结果:{"name":"张三","age":20,"school":"家里蹲大学","grade":"本科"}

skykful
skykful · #6 · 2年之前
jan-barjan-bar #5 回复

三方库解君愁 ```go package main import ( "fmt" "strings" jsoniter "github.com/json-iterator/go" "github.com/json-iterator/go/extra" ) func main() { err := test() if err != nil { panic(err) } } func test() error { type Person struct { Name string Age int } type Student struct { Person School string `json:"school"` Grade string `json:"grade"` } extra.SetNamingStrategy(strings.ToLower) // 设置名称转换规则 json := jsoniter.ConfigCompatibleWithStandardLibrary s1 := new(Student) s1.Name = "张三" s1.Age = 20 s1.School = "家里蹲大学" s1.Grade = "本科" b, err := json.Marshal(s1) if err != nil { return err } fmt.Println(string(b)) return nil } ``` 结果:{"name":"张三","age":20,"school":"家里蹲大学","grade":"本科"}

谢谢,你这个好用,谢谢大佬,哈哈

Neightly
Neightly · #7 · 2年之前
GGXXLLGGXXLL #2 回复

要么自定义结构体,把 `Person` 转成自己要的。要么自己用 `reflect` 实现一个 `Marshal` 方法。

张口就来,确定用reflect实现一个Marshal方法靠谱?确定要把标准库那一大坨自己写一遍?

GGXXLL
GGXXLL · #8 · 2年之前

@Neightly 你说话这么冲干啥?reflect 实现 Marshal 方法百度搜就有。我起码是回答问题,哪怕不好用,也确实是方法之一,有错吗?

EddyLee1010
EddyLee1010 · #9 · 大约1年之前
GGXXLLGGXXLL #8 回复

@Neightly 你说话这么冲干啥?reflect 实现 Marshal 方法百度搜就有。我起码是回答问题,哪怕不好用,也确实是方法之一,有错吗?

哈哈,还记得你评论过 我俩互喷点事吧,你也被咬了吧 哈哈哈

EddyLee1010
EddyLee1010 · #10 · 大约1年之前
GGXXLLGGXXLL #8 回复

@Neightly 你说话这么冲干啥?reflect 实现 Marshal 方法百度搜就有。我起码是回答问题,哪怕不好用,也确实是方法之一,有错吗?

你要是敢再多说几句,他会去你空间追着咬。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传