程序开发 · 2024年7月20日

当Golang的Marshal转换为json时,数组部分变成了对象,所以我想保留数组

当前位置: > > > > 当Golang的Marshal转换为json时,数组部分变成了对象,所以我想保留数组

来源:stackoverflow
2024-04-24 10:21:27
0浏览
收藏

你在学习Golang相关的知识吗?本文《当Golang的Marshal转换为json时,数组部分变成了对象,所以我想保留数组》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我想做什么

  • 使用 unmarshal 将 json 格式的 {"color": "red", "mrkdwn_in":["text"]} 转换为结构体
  • 将“颜色”从“红色”更改为“蓝色”
  • 使用 marshal 将更改后的结构更改为 json
  • 原始的 "mrkdwn_in":["text"]} 保存得不好。
    • 它变成 "mrkdwn_in":[{"text":""}]"mrkdwn_in":""
  • 我想将“mrkdwn_in”部分保留其原始状态。

代码

package main

import (
    "encoding/json"
    "fmt"
)

type TestStruct struct {
    Color        string       `json:"color"`
    MrkdwnIn     []MrkdwnIn   `json:"mrkdwn_in"`
}

type MrkdwnIn struct {
    Text string `json:"text"`
}

func main() {
    jsonData1 := "{\"color\":\"red\",\"mrkdwn_in\":[\"text\"]}"
    var body TestStruct
    json.Unmarshal([]byte(jsonData1), &body)
    body.Color = "blue"
    var jsonData2 []byte
    jsonData2, _ = json.Marshal(body)

    jsonDataText := string(jsonData2)
    fmt.Println(jsonDataText)
}

上述代码的执行结果

解决方案

错误很明显

mrkdwnin     []mrkdwnin   `json:"mrkdwn_in"`

mrkdwnin 是一个对象数组

MrkdwnIn     []string`json:"mrkdwn_in"`

mrkdwnin 应该是一个字符串数组

理论要掌握,实操不能落!以上关于《当Golang的Marshal转换为json时,数组部分变成了对象,所以我想保留数组》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注公众号吧!