This is far from perfect, but this question really deserves an answer.
https://github.com/EsotericSoftware/jsonbeans is one way to kind of accomplish something like this. It converts arbitrary Java objects (without having to annotate the fields or anything) to JSON, and includes a pretty-printing method. It can do approximately what you are asking for.
Using this library, you can do something like this:
Json json = new Json();
System.out.println(json.prettyPrint(person));
For some example data, the output you might get looks like this:
{
"name": "Nate",
"age": 31,
"numbers": [
{
"name": "Home",
"class": "com.example.PhoneNumber",
"number": "206-555-1234"
},
{
"name": "Work",
"class": "com.example.PhoneNumber",
"number": "425-555-4321"
}
]
}