Johnman.md

プログラミングのことや個人的なことを書きます。たぶん。

【Go】stringがJSON形式かどうかを判定する

stringを受け取った際、そのstringがJSONの形式を持っているかを判定したい場合に使える。

func isJSONString(s string) bool {
    var js json.RawMessage
    err := json.Unmarshal([]byte(s), &js)
    return err == nil
}

やっていることは簡単で、json.RawMessage型の変数を用意して、そこにUnmarshalをかけています。

もしstringがJSONでなければエラーが返されるので、nilと比較すればJSONかどうかがわかるという寸法です。

ちなみに、json.RawMessageじゃなくstringを使ってしまうと、JSONの中に数字なんかが入っていた場合に正しく判定できなくなるので、json.RawMessage型を使う方が無難だと思います。