Как десериализовать jsonarray в список <Map>в java, используя flexjson.deserializer? - PullRequest
1 голос
/ 11 февраля 2011

На стороне клиента я создал JSOnARRAY следующим образом:

{"filterEntries":[{"dataName":"mainContact","filterValue":"BILLGATES"}]}.

На стороне сервера (java) я могу удалить значения, используя:

jfilter = JSONValue.parse(jsonFilterStr); //jsonFilterStr={"filterEntries":[{"dataName":"mainContact","filterValue":"BILLGATES"}]}.

JSONArray jFilterEntries = (JSONArray) jfilter.get("filterEntries");
for (int i=0;i<jFilterEntries.size();i++){
    JSONObject jFilterEntry = (JSONObject) jFilterEntries.get(i);
    String dataName = (String) jFilterEntry.get("dataName");
    String filterValue = (String) jFilterEntry.get("filterValue");
}

Носуществующее приложение использует flex.json.deserializer, и я не могу добиться того же с помощью flex.json.deserializer.Как мне поступить?Я хочу сделать что-то вроде этого:

JSONDeserializer jsonDeserializer = new JSONDeserializer();
jsonDeserializer.use(null, List.class);
List<Map<String,String>>    lMap= (List<Map<String,String>>)jsonDeserializer.deserialize(params);

1 Ответ

3 голосов
/ 13 февраля 2011

Помните верхний объект, который оборачивает массив. Вы должны справиться с этим также. Вы должны сказать это, чтобы ожидать карту внутри списка. Для этого необходимо указать тип, содержащийся в списке, с помощью выражения пути «значения».

Map<String,List<Map<String,String>>> result = new JSONDeserializer<Map<String,List<Map<String,String>>>>()
    .use("values",List.class)
    .use("values.values", Map.class)
    .deserialize( json);

List<Map<String,String>> filterEntries = result.get("filterEntries");

Обновлено : добавьте новое ключевое слово, и родовые типы справа будут соответствовать левому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...