I want to create a function to receive an input string which can be string in json format or just a string. For example, something easy like following function.
func checkJson(input string){ if ... input is in json ... { fmt.Println("it's json!") } else { fmt.Println("it's normal string!") } }
All json strings start with '{' or '[' and end with the corresponding '}' or ']', so just check for that.
Let's write some tests to check the main cases: String json = "{\"email\": \"example@com\", \"name\": \"John\"}"; assertTrue(validator. isValid(json)); String json = "[{\"email\": \"example@com\", \"name\": \"John\"}]"; assertTrue(validator.
JSON is purely a string with a specified data format — it contains only properties, no methods. JSON requires double quotes to be used around strings and property names. Single quotes are not valid other than surrounding the entire JSON string.
To check if JavaScript object is JSON, we can use the JSON. parse method. const isJson = (data) => { try { const testIfJson = JSON. parse(data); if (typeof testIfJson === "object") { return true; } else { return false; } } catch { return false; } };
For anyone else looking for a way to validate any JSON string regardless of schema, try the following:
func IsJSON(str string) bool { var js json.RawMessage return json.Unmarshal([]byte(str), &js) == nil }
I was unclear if you needed to know about just a "quoted string" or if you needed to know about json, or the difference between both of them, so this shows you how to detect both scenarios so you can be very specific.
I posted the interactive code sample here as well: 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)) } }
Which will output this:
isJSONString("Platypus") = true isJSON("Platypus") = false isJSONString(Platypus) = false isJSON(Platypus) = false isJSONString({"id":"1"}) = false isJSON({"id":"1"}) = true
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With