当前位置: 代码网 > it编程>前端脚本>Golang > Golang String字符串类型转Json格式

Golang String字符串类型转Json格式

2024年05月26日 Golang 我要评论
go的string字符串格式转json格式确实有点麻烦,如果不知道json里面的类型好像就构建不了结构体了。package mainimport ("encoding/json""fmt")type

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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com