相关文章推荐
酷酷的煎鸡蛋  ·  Golang WebSocket Ping ...·  1 周前    · 
不拘小节的电池  ·  Llama ...·  4 月前    · 
奔放的四季豆  ·  Epplus c# to excel 的 ...·  1 年前    · 
msg := "{\"status\":200, \"msg\":18}" var data Data if err := json . Unmarshal ( [ ] byte ( msg ) , & data ) ; err == nil { fmt . Println ( data . Status ) } else { fmt . Println ( err )

针对包含任意层级的 JOSN 数据,声明结构体类型比较困难
encode\json 包还提供另外一种方法来解析 JSON 数据。

encoding\json 包使用:

map [string] interface {} 存储 JOSN 对象
[] interface 存储 JOSN 数组

json.Unmarshl 将会把任何合法的 JSON 数据存储到一个 interface {} 类型的值,通过使用空接口类型我们可以存储任意值,但是使用这种类型作为值时需要先做一次类型断言。

示例代码:

jsonData := []byte(`{"Name":"Eve","Age":6,"Parents":["Alice","Bob"]}`)
var v interface{}
json.Unmarshal(jsonData, &v)
data := v.(map[string]interface{})
for k, v := range data {
    switch v := v.(type) {
    case string:
        fmt.Println(k, v, "(string)")
    case float64:
        fmt.Println(k, v, "(float64)")
    case []interface{}:
        fmt.Println(k, "(array):")
        for i, u := range v {
            fmt.Println("    ", i, u)
    default:
        fmt.Println(k, v, "(unknown)")

用 Decoder 解析数据流

上面都是使用的 UnMarshall 解析的 JSON 数据,如果 JSON 数据的载体是打开的文件或者 HTTP 请求体这种数据流(他们都是 io.Reader 的实现),我们不必把 JSON 数据读取出来后再去调用 encode/json 包的 UnMarshall 方法,包提供的 Decode 方法可以完成读取数据流并解析 JSON 数据最后填充变量的操作。

// This example uses a Decoder to decode a stream of distinct JSON values.
func ExampleDecoder() {
    const jsonStream = `
    {"Name": "Ed", "Text": "Knock knock."}
    {"Name": "Sam", "Text": "Who's there?"}
    {"Name": "Ed", "Text": "Go fmt."}
    {"Name": "Sam", "Text": "Go fmt who?"}
    {"Name": "Ed", "Text": "Go fmt yourself!"}
    type Message struct {
        Name, Text string
    dec := json.NewDecoder(strings.NewReader(jsonStream))
    for {
        var m Message
        if err := dec.Decode(&m); err == io.EOF {
            break
        } else if err != nil {
            log.Fatal(err)
        fmt.Printf("%s: %s\n", m.Name, m.Text)
    // Output:
    // Ed: Knock knock.
    // Sam: Who's there?
    // Ed: Go fmt.
    // Sam: Go fmt who?
    // Ed: Go fmt yourself!
                    Go语言的转换go的string字符串格式转json格式确实有点麻烦,如果不知道json里面的类型好像就构建不了结构体了。package mainimport (	"encoding/json"	"fmt")type Data struct {	Status  int    `json:"status"`	Msg   int    `json:"msg"`}func main() {	msg := "{\"status\":200, \"msg\":18}"	var da
				
Go 语言入门很简单 – Go 语言化为 JSON 在日常工作中,除了需要从 JSON 化为 Go 的数据结构。但往往相反的情况是:我们需要将数据以 JSON 字符串的形式发送到 Web 服务器。今天我们将学会如何从一个结构化数据编码为 JSON 。 结构体JSON 格式 比如,我们有如下的结构体: type Student struct { Name string Age int Address Address type Address struct { m := make(map[string]string, 0) m["phone"] = "15656565656" json, err := json.Marshal(m) if err != nil { fmt.Printf("err:%v\n",err) fmt.Printf("未字符串:%v\n",json) strJson := strconv.Quote(string(json)) fmt.Printf("字符串:%v\n",strJs
1. 解析json字符串到结构体 将json字符串解析到结构体,因为这里的 common_policy_config 是json数组,没办法用字段来表示,所以需要用 []interface{} 来存。 package main import ( "encoding/json" "github.com/beego/beego/v2/adapter/logs" type Request_common_policy_config struct { Action stri
在存储的时候想把数据列表存储成json string,但是在代码使用的时候又觉得用map更快更方便。这个时候就需要相互换,下面是一个换的例子。 // Test for json and map converting package main import ( encoding/json func main() { jsonStr := `{ip: 127.0.0.1, device: ABESSF0023}` // test json string to map m, err := JsonToMap(jsonStr) if err !=
1. 结构体到json格式 1.1 简单换 基本的Golang结构体换成JSON格式数据,主要在结构体的相关字段中加入json : "keyword"字段。具体做法如下: type Structname struct{ feild1 Type1 `json:"keyword1"` feild2 Type2 `json:"keyword2"` 相关具体实例如下: package message import ( "encoding/json" "log" "testing"
在Go语言中,将字符串类型换为map类型的最简单方法是使用json包的Unmarshal函数。首先,我们需要创建一个空的map变量,然后使用json.Unmarshal函数将字符串换为该map变量。 下面是一个示例代码: class_detail_map := make(map[string]string) err := json.Unmarshal([]byte(class_detail), &class_detail_map) if err != nil { // 错误处理 其中,class_detail是一个包含JSON字符串的变量,class_detail_map是目标map变量。通过调用json.Unmarshal函数,将class_detail字符串换为class_detail_map。 另外,还有一个第三方库xml2map可以用于将XML换为map类型。使用该库需要先安装,可以通过执行`go get -u github.com/sbabiv/xml2map`命令进行安装。然后,可以使用该库提供的函数将XML字符串换为map类型。 注意,无论是使用json.Unmarshal还是xml2map,都需要确保目标map的结构与字符串数据的结构一致。 总之,在Go语言中,可以使用json.Unmarshal函数将字符串换为map类型。另外,也可以使用第三方库xml2map将XML换为map类型。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Go string map](https://blog.csdn.net/m0_67392182/article/details/123622930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [xml2map:XML到MAP换器的Golang编写](https://download.csdn.net/download/weixin_42164931/15111372)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Golang类型换-将map [string] string换为map [someStruct] string](https://blog.csdn.net/weixin_39704314/article/details/118801877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]