Golang String字符串类型转Json格式

 更新时间:2024年05月06日 08:52:47   作者:小生凡一  
本文主要介绍了Golang String字符串类型转Json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

go的string字符串格式转json格式

确实有点麻烦,如果不知道json里面的类型好像就构建不了结构体了。

package main

import (
	"encoding/json"
	"fmt"
)

type Data struct {
	Status  int    `json:"status"`
	Msg   int    `json:"msg"`
}


func main() {
	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!
}

到此这篇关于Golang String字符串类型转Json格式的文章就介绍到这了,更多相关Golang String字符串转Json内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Golang中的自定义函数类型详解

    Golang中的自定义函数类型详解

    在 Golang 中,type 关键字用于定义自定义类型,函数也是一种数据类型,因此可以使用 type 关键字来定义函数类型,本文就给大家详细介绍一下Golang中的自定义函数类型,需要的朋友可以参考下
    2023-07-07
  • Golang 语言控制并发 Goroutine的方法

    Golang 语言控制并发 Goroutine的方法

    本文我们介绍了不同场景中分别适合哪种控制并发 goroutine 的方式,其中,channel 适合控制少量 并发 goroutine,WaitGroup 适合控制一组并发 goroutine,而 context 适合控制多级并发 goroutine,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • Go语言基础单元测试与性能测试示例详解

    Go语言基础单元测试与性能测试示例详解

    这篇文章主要为大家介绍了Go语言基础单元测试与性能测试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步
    2021-11-11
  • 浅析Go语言中的栈和先进先出原则

    浅析Go语言中的栈和先进先出原则

    这篇文章主要来和大家探讨一样如何在Go语言中实现和使用堆栈,以及堆栈如何遵循先进先出 (FIFO) 原则,文中的示例代码简洁易懂,需要的可以参考一下
    2023-07-07
  • 一文详解Golang中的基础语法

    一文详解Golang中的基础语法

    这篇文章主要为大家详细介绍了Golang中基础语法的相关知识,文中的示例代码讲解详细,对我们学习Golang有一定的帮助,感兴趣的可以了解一下
    2023-03-03
  • Go语言部署Kubernetes的实现示例

    Go语言部署Kubernetes的实现示例

    本文介绍了将Go应用部署到Kubernetes的全过程,实现自动扩展、滚动更新、健康检查、监控,并提供了最佳实践和完整示例,具有一定的参考价值,感兴趣的可以了解一下
    2026-05-05
  • GO语言zap日志库理解和使用方法示例

    GO语言zap日志库理解和使用方法示例

    Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,这篇文章主要介绍了GO语言zap日志库理解和使用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-11-11
  • go-zero熔断机制组件Breaker接口定义使用解析

    go-zero熔断机制组件Breaker接口定义使用解析

    这篇文章主要为大家介绍了go-zero熔断机制组件Breaker接口定义使用解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Go 基于令牌桶的限流器实现

    Go 基于令牌桶的限流器实现

    如果一般流量过大,下游系统反应不过来,这个时候就需要限流了,本文主要介绍了Go 基于令牌桶的限流器实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Go语言sync.Cond基本使用及原理示例详解

    Go语言sync.Cond基本使用及原理示例详解

    这篇文章主要为大家介绍了Go语言sync.Cond基本使用及原理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论