我想验证字节数组数据是否包含有效的 JSON,使用 unmarsall 方法进入接口(interface)。
package main
import (
"encoding/json"
"fmt"
)
func isJSON(s string) bool {
var js map[string]interface{}
return json.Unmarshal([]byte(s), &js) == nil
}
func main() {
var tests = []string{
`{"a":"b"}`,
`[{"a":"b"},{"a":"b"}]`,
}
for _, t := range tests {
fmt.Printf("isJSON(%s) = %v\n\n", t, isJSON(t))
}
}
两个输入测试参数都是有效的JSON字符串,但它是基于接口(interface)'map[string]interface{}'进行验证的
{
"a": "b"
}
[{
"a": "b"
}, {
"a": "b"
}]
我想验证 JSON 文本。 JSON 文本是序列化的对象或数组。因此,当我在 playground 中添加测试用例时,寻找支持 JSON 文本所有有效用例的解决方案。 .
如何使这个接口(interface)即 var map[string]interface{}
通用,以便它支持有效 JSON 字符串的两个测试用例?
最佳答案
不要使用 map[string]interface{}
,只需使用 interface{}
。第二个例子是[]interface{}
类型,还有更多类型的有效json。
这是您的工作代码。我又添加了几例有效的 json。
这里的代码如果你只想允许 map 和 slice :
关于arrays - 使用解码到通用接口(interface)时如何验证 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49340734/