Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 解码字符串和整数的切片_Json_Go_Slice - Fatal编程技术网

Json 解码字符串和整数的切片

Json 解码字符串和整数的切片,json,go,slice,Json,Go,Slice,如何解码没有字段名的字符串和整数片段 这是我试图解码的远程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:

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

这是我试图解码的远程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)
我是否可以使用json解码器和接口{}对其进行解码?

回答您的问题:-

我可以使用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)
    }
}
关于您的问题:-

我可以使用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)
    }
}

这些是JSON数组。它可以被解码成
[]字符串
。需要吗?@leadbebop JSON包含一个JSON编号,不能直接解组为
字符串
。@icza在mobile上,我没有滚动到最后。我懂了。尽管如此,预期的结果仍然不清楚。这些是JSON数组。它可以被解码成
[]]字符串
。需要吗?@leadbebop JSON包含一个JSON编号,不能直接解组为
字符串
。@icza在mobile上,我没有滚动到最后。我懂了。但是,期望的结果仍然不清楚。或者您可以将
result
声明为
var result[][]接口{}
directly@BarryLau是的,也一样。仍然需要类型断言来获取基础值。或者您可以将
result
声明为
var result[][]接口{}
directly@BarryLau是的,也一样。仍然需要类型断言来获取基础值。