This is really just a cache for numeric comparison. Maybe it should be called "requireJsonValueIsNumber", it just so happens that any number json can represent can be compared as a float64 (well I guess if reader and writer support it 2^63+1 could be stuffed in there and only treated as an int64).

So you see why these things are where they are; to do this conversion once instead of for every message. I guess I could do a static/singleton thing (I'm thinking of static function-scoped variables in c) if go can do that.