我想创建一个函数来接收一个可以是json格式的字符串或只是一个字符串的输入字符串.例如,像以下功能一样容易.
func checkJson(input string){ if ... input is in json ... { fmt.Println("it's json!") } else { fmt.Println("it's normal string!") } }
我不清楚,如果你需要知道一个“引用的字符串”,或者如果你需要知道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",isJSON(t)) } }
哪个会输出:
isJSONString("Platypus") = true isJSON("Platypus") = false isJSONString(Platypus) = false isJSON(Platypus) = false isJSONString({"id":"1"}) = false isJSON({"id":"1"}) = true