大话西游666
使用json.Decoder. 这比其他答案有优势:比解码整个值更有效使用官方的 JSON 解析规则,如果输入无效则生成标准错误。请注意,此代码未经测试,但应该足以让您了解。如果需要,它还可以轻松扩展以检查数字、布尔值或字符串。func jsonType(in io.Reader) (string, error) { dec := json.NewDecoder(in) // Get just the first valid JSON token from input t, err := dec.Token() if err != nil { return "", err } if d, ok := t.(json.Delim); ok { // The first token is a delimiter, so this is an array or an object switch (d) { case '[': return "array", nil case '{': return "object", nil default: // ] or }, shouldn't be possible return "", errors.New("Unexpected delimiter") } } return "", errors.New("Input does not represent a JSON object or array")}请注意,这消耗了in. 如有必要,读者可以复印一份。如果您尝试从字节切片 ( ) 中读取[]byte,请先将其转换为读取器:t, err := jsonType(bytes.NewReader(myValue))