If size or loading speed is important to you then don't use JSON, use binary. If size is important to you, compress the binary file.
If your ear is a mesh, use a linked mesh instead of duplicating the mesh. That way the vertices are only stored once.
If you use deform keys to animate meshes, use weights instead. If you must use deform keys, you can have all linked meshes share one set of keys.
You could have a skeleton that is just one ear and render multiple instances of it at runtime to have many ears on screen at once. The ears can all animate independently. If you have many though, you probably only need 5-10 unique animations (possibly the same animation with different offsets), then spread those throughout your 100 ears (or however many you have). That way you only need to do the work to pose 5-10 skeleton instances even though you have 100 on screen. You'll have to play with how many skeleton instances looks right for your application.