Well, there's a few things I personally think are a must for a config format:
- It must be human readable and editable, in some way. - in many cases, you may want to go and change something in the config while the application proper isn't running. That rules out stuff like pickle or binary formats. Although I suppose sqlite and it's ilk still fulfill it, in a roundabout way.
- It should be unambiguous, with one way to do something right. - this one's a doozie. JSON fulfills it since it's unambiguous about it's types, but many interpreted language configs will have options. And then YAML will have "no" turn into "false".
- It should probably have comments. - handily failed by standard JSON implementations. Although to be fair a lot of parsers I've used understand comments. Or you can make a comment stripper real easily.
- It should have obvious structure. - I've dealt with CSV configs before, I do not want to ever again.