dongqi1245
2018-08-06 09:50
浏览 55
已采纳

解码字符串和整数的切片

How do you decode a slice of strings and integers which don't have field names?

This is the output from the remote API I am trying to decode:

[["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]]

I get this as a slice of bytes after doing

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

Can I decode this using the json decoder with [][]interface{}?

图片转代码服务由CSDN问答提供 功能建议

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

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

  [[“” 9BC67ACD“,” example1“,” example1.co.uk“  ,“ 2018-08-06 08:46:44”,“ 2018-08-06 08:46:44”,“ 2018-08-06 08:46:44”,“完成”,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解码器对其进行解码吗

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douwei2825 2018-08-06 09:55
    已采纳

    For your question:-

    Can I decode this using the json decoder with [][]interface{}

    Yes you can there is nothing wrong with decoding the JSON output. This is an array of 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]]
    

    Or you can Unmarshal the JSON into an interface{}. But in both cases you need type assertion to fetch the underlying value of an interface.

    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 
     ", value.(string))
        case bool:
            fmt.Printf("%v is bool 
     ", value.(bool))
        case float64:
            fmt.Printf("%v is float64 
     ", value.(float64))
        case []interface{}:
            fmt.Printf("%v is a slice of interface 
     ", value)
            for _, v := range value.([]interface{}) {
                fetchValue(v)
            }
        case map[string]interface{}:
            fmt.Printf("%v is a map 
     ", value)
            for _, v := range value.(map[string]interface{}) {
                fetchValue(v)
            }
        default:
            fmt.Printf("%v is unknown 
     ", value)
        }
    }
    

    Playground example

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题