登录
首页 >  Golang >  Go问答

检查 JSON 是对象还是数组

来源:stackoverflow

时间:2024-04-24 12:42:34 446浏览 收藏

你在学习Golang相关的知识吗?本文《检查 JSON 是对象还是数组》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

Go 中有没有一种简单的方法来检查给定的 JSON 是对象 {} 还是数组 []

首先想到的就是把json.Unmarshal()变成一个接口,然后看看是变成了一个map,还是一个map的切片。但这似乎效率很低。

我可以检查第一个字节是 { 还是 [ 吗?或者是否有更好的方法已经存在。


解决方案


使用以下命令检测 []bytedata 中的 json 文本是否是数组或对象:

// get slice of data with optional leading whitespace removed.
 // see rfc 7159, section 2 for the definition of json whitespace.
 x := bytes.trimleft(data, " \t\r\n")

 isarray := len(x) > 0 && x[0] == '['
 isobject := len(x) > 0 && x[0] == '{'

此代码片段处理可选的前导空格,并且比解组整个值更有效。

由于 json 中的顶级值也可以是数字、字符串、布尔值或 nil,因此 isarrayisobject 的计算结果可能都为 false。当 json 无效时,值 isarrayisobject 也可以计算为 false。

使用类型开关来确定类型。这与 xay 的答案类似,但更简单:

var v interface{}
if err := json.Unmarshal(data, &v); err != nil {
    // handle error
}
switch v := v.(type) {
case []interface{}:
    // it's an array
case map[string]interface{}:
    // it's an object
default:
    // it's something else
}

终于介绍完啦!小伙伴们,这篇关于《检查 JSON 是对象还是数组》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>