如何在将unmarshal用于通用接口时验证JSON?

时间:2018-03-17 18:57:15

标签: arrays json go

我想验证字节数组数据是否包含使用unmarsall方法进入接口的有效JSON。

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字符串,但它会根据界面' map [string] interface {}'

进行验证
{
    "a": "b"
}

[{
    "a": "b"
}, {
    "a": "b"
}]

我想验证JSON文本。 JSON文本是序列化对象或数组。因此,当我在playground中添加测试用例时,寻找支持JSON文本的所有有效案例的解决方案。

如何创建此接口,即var map[string]interface{}泛型,以便它支持两个有效JSON字符串的测试用例?

Solved: Playground Link

1 个答案:

答案 0 :(得分:3)

不要使用map[string]interface{},而只是使用interface{}。第二个示例是[]interface{}类型,有更多类型的有效json。

这是您的工作代码。我添加了一些有效的json案例。

playground

如果您只想允许地图和切片,请输入代码:

playground