Json 解码字符串和整数的切片
如何解码没有字段名的字符串和整数片段 这是我试图解码的远程API的输出: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:
[["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是的,也一样。仍然需要类型断言来获取基础值。