Golang String字符串类型转Json格式-阿里云开发者社区

开发者社区> 小生凡一> 正文

Golang String字符串类型转Json格式

简介: go的string字符串格式转json格式 确实有点麻烦,如果不知道json里面的类型好像就构建不了结构体了。
+关注继续查看

Go语言的转换

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!
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
json格式的字符串转为json对象遇到特殊字符问题解决
中午做后台发过来的json的时候转为对象,可是有几条数据一直出不来,检查发现json里包含了换行符,造成这种情况的原因可能是编辑部门在编辑的时候打的回车造成的 假设有这样一段json格式的字符串 1 var json={ 2 "school": [ 3 { 4 ...
612 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8771 0
如何将NSString字符串放入剪贴板
<p style="margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; color:rgb(37,37,37); font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-s
1100 0
Xaml中string(字符串)常量的定义以及空格的处理
原文:Xaml中string(字符串)常量的定义以及空格的处理 (1)基本用法 xaml中可以实例化各种对象,比如在ResourceDictionary中定义字符串常量:   ...
937 0
silverlight中如何将string(字符串)写入Resource(资源)?
1.导入命名空间 xmlns:clr="clr-namespace:System;assembly=mscorlib" 2.然后就可以这样用了                           http://www.
531 0
巧用JSON.stringify()生成漂亮格式的JSON字符串
巧用JSON.stringify()生成漂亮格式的JSON字符串 使用JavaScript处理XML基本上就是一个杯具,这也是JSON在程序开发中广受欢迎的原因。我曾经写过一个 JavaScript函数来将XML转换为JSON,那种~duang~duang~的痛点简直是折腾得你欲死欲仙。
771 0
json格式的字符串序列化和反序列化的一些高级用法
json格式的字符串序列化和反序列化的一些高级用法
9 0
+关注
小生凡一
你好呀!
157
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载