登录
首页 >  Golang >  Go问答

解码字符串和整数切片

来源:stackoverflow

时间:2024-04-23 16:45:34 302浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《解码字符串和整数切片》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

如何解码没有字段名称的字符串和整数切片?

这是我尝试解码的远程 api 的输出:

[["9bc67acd", "example1", "example1.co.uk", "2018-08-06 08:46:44", "2018-08-06 08:46:44", "2018-08-06 08:46:44", "finished", 1], ["b339cba2", "example2", "example2.co.uk", "2018-08-06 08:38:25", "2018-08-06 08:38:24", "2018-08-06 08:38:27", "finished", 1]]

执行完后我得到了一个字节片段

rBody, err := ioutil.ReadAll(r.Body)

我可以使用带有 [][]interface{} 的 json 解码器对其进行解码吗?


解决方案


对于您的问题:-

我可以使用带有 [][]interface{} 的 json 解码器对其进行解码

是的,解码 json 输出没有任何问题。这是一个 json 数组。

[["9bc67acd", "example1", "example1.co.uk", "2018-08-06 08:46:44", "2018-08-06 08:46:44", "2018-08-06 08:46:44", "finished", 1], ["b339cba2", "example2", "example2.co.uk", "2018-08-06 08:38:25", "2018-08-06 08:38:24", "2018-08-06 08:38:27", "finished", 1]]

或者您可以将 json 解组到接口{}中。但在这两种情况下,您都需要类型断言来获取接口的基础值。

package main

import (
    "fmt"
    "encoding/json"
)

var jsonBytes string = `[["9BC67ACD", "example1", "example1.co.uk", "2018-08-06 08:46:44", "2018-08-06 08:46:44", "2018-08-06 08:46:44", "FINISHED", 1], ["B339CBA2", "example2", "example2.co.uk", "2018-08-06 08:38:25", "2018-08-06 08:38:24", "2018-08-06 08:38:27", "FINISHED", 1]]`

func main() {
    var result interface{}
    if err := json.Unmarshal([]byte(jsonBytes), &result); err != nil{
        fmt.Println(err)
    }
    fetchValue(result) // This function recursively get the underlying value of an interface.
}

func fetchValue(value interface{}) {
    switch value.(type) {
    case string:
        fmt.Printf("%v is an string \n ", value.(string))
    case bool:
        fmt.Printf("%v is bool \n ", value.(bool))
    case float64:
        fmt.Printf("%v is float64 \n ", value.(float64))
    case []interface{}:
        fmt.Printf("%v is a slice of interface \n ", value)
        for _, v := range value.([]interface{}) {
            fetchValue(v)
        }
    case map[string]interface{}:
        fmt.Printf("%v is a map \n ", value)
        for _, v := range value.(map[string]interface{}) {
            fetchValue(v)
        }
    default:
        fmt.Printf("%v is unknown \n ", value)
    }
}

Playground example

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>