Если вы хотите изменить библиотеки, вы можете взглянуть на Джексона, его режим Simple Data Binding должен позволить вам десериализовать объект, как вы описали.Часть документа, которая, вероятно, весьма важна, это этот , вашему примеру уже понадобится JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES
для работы ...
Уточнение для Брюса: правда, в режиме полного связывания данных Джексона, но не в режиме простого связывания данных.Это простое связывание данных:
public static void main(String[] args) throws IOException {
File src = new File("test.json");
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature. ALLOW_UNQUOTED_FIELD_NAMES, true);
mapper.configure(JsonParser.Feature.ALLOW_COMMENTS,true);
Object root = mapper.readValue(src, Object.class);
Map<?,?> rootAsMap = mapper.readValue(src, Map.class);
System.out.println(rootAsMap);
}
, которое с визуально исправленными выборочными данными JSON OP дает:
{data=[{type=earnings, info={earnings=45.6, dividends=4052.94, gains=0,
expenses=3935.24, shares_bought=0, shares_bought_user_count=0, shares_sold=0,
shares_sold_user_count=0}, created=2011-07-04 11:46:17}, {type=mentions,
info=[{type_id=twitter, mentioner_ticker=LOANS, mentioner_full_name=ERICK STROBEL}],
created=2011-06-10 23:03:02}]}
ОК, для ручной привязки этой карты к исходным данным требуется некоторое ручное кодирование., но нередко меньше - это больше, и такой код отображения, будучи очень простым, имеет то преимущество, что впоследствии его очень легко читать / поддерживать.