解码字符串和整数的切片

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{}?

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