我想创建一个函数来接收一个输入字符串,该字符串可以是json格式的字符串或只是一个字符串.例如,像下面的功能一样容易.
func checkJson(input string){
   if ... input is in json ... {
      fmt.Println("it's json!")
   } else {
      fmt.Println("it's normal string!")
   }
}
Wil*_*ing 38
对于其他任何寻求验证任何JSON字符串而不管架构的方法的人,请尝试以下方法:
func IsJSON(str string) bool {
    var js json.RawMessage
    return json.Unmarshal([]byte(str), &js) == nil
}
Cor*_*Nou 22
我不清楚你是否需要知道一个"引用的字符串",或者你是否需要了解json,或者两者之间的区别,所以这将告诉你如何检测这两种情况,这样你就可以非常具体.
我也在这里发布了交互式代码示例:http://play.golang.org/p/VmT0BVBJZ7
package main
import (
    "encoding/json"
    "fmt"
)
func isJSONString(s string) bool {
    var js string
    return json.Unmarshal([]byte(s), &js) == nil
}
func isJSON(s string) bool {
    var js map[string]interface{}
    return json.Unmarshal([]byte(s), &js) == nil
}
func main() {
    var tests = []string{
        `"Platypus"`,
        `Platypus`,
        `{"id":"1"}`,
    }
    for _, t := range tests {
        fmt.Printf("isJSONString(%s) = %v\n", t, isJSONString(t))
        fmt.Printf("isJSON(%s) = %v\n\n", t, isJSON(t))
    }
}
哪个会输出这个:
isJSONString("Platypus") = true
isJSON("Platypus") = false
isJSONString(Platypus) = false
isJSON(Platypus) = false
isJSONString({"id":"1"}) = false
isJSON({"id":"1"}) = true
val*_*ala 21
标准encoding/json库包含从 go 1.9 开始的json.Valid函数 - 请参阅https://github.com/golang/go/issues/18086。此函数可用于检查提供的字符串是否为有效的 json:
if json.Valid(input) {
    // input contains valid json
}
但json.Valid与第三方解决方案(例如fastjson.Validate )相比,速度可能相当慢,后者比标准快 5 倍json.Valid- 请参阅benchmarksjson validation部分。
例如,
package main
import (
    "encoding/json"
    "fmt"
)
func isJSONString(s string) bool {
    var js string
    err := json.Unmarshal([]byte(s), &js)
    return err == nil
}
func main() {
    fmt.Println(isJSONString(`"Platypus"`))
    fmt.Println(isJSONString(`Platypus`))
}
输出:
true
false