Анализ JSON для нескольких коллекций POJO - PullRequest
2 голосов
/ 24 октября 2011

Мне нужно каким-то образом преобразовать одну строку json в несколько объектов определенного типа, используя GSON.

У меня есть формат одной строки JSON (ниже содержит 2, но может быть 100 с)

{domain : name1, geo: us} {domain : name2, country : uk}

Теперь я хочу преобразовать вышесказанное в мои экземпляры pojo, которые отображаются на каждую часть строки. Предположим, что POJO называется Веб-сайт. Затем мне нужно разделить строку json на 2 объекта Website.

Я думал о том, чтобы разбить строку json, используя какой-нибудь токенизатор, а затем применить некоторую логику json к каждой части. Я предполагаю, что должен был бы сделать это перед применением любого преобразования json в pojo?

Кажется, я не могу найти способ сделать это. Пожалуйста, сообщите.

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Предположим, у вас есть класс веб-сайта, подобный следующему:

class Website {
    String domain;
    String geo;
}

Сначала исправьте строку, чтобы она была действительной. Json:

String input = "{\"domain\" : \"name1\", \"geo\": \"us\"} {\"domain\" : \"name2\", \"country\" : \"uk\"}";

String json = "[" + input + "]";

Затем используйте стандартную технику gson для преобразования в список веб-сайтов.:

java.lang.reflect.Type t = new TypeToken<List<Website>>(){}.getType();
List<Website> websites = new Gson().fromJson(json, t);
2 голосов
/ 24 октября 2011

Чтобы десериализовать JSON в Java Pojo, попробуйте json-lib, http://json -lib.sourceforge.net / . Это хорошее решение. Хотя я бы использовал flexjson для сериализации.

String json = "{bool:true,integer:1,string:\"json\"}";  
JSONObject jsonObject = JSONObject.fromObject( json );  
BeanA bean = (BeanA) JSONObject.toBean( jsonObject, BeanA.class );  

, где BeanA - ваш POJO.

Если у вас есть несколько объектов, как вы показали в своем примере, сделайте следующее

String json = "{'data':[{'name':'Wallace'},{'name':'Grommit'}]}";
JSONArray jsonArray = (JSONArray) net.sf.json.JSONSerializer.toJSON(json);
for (int i = 0; i < jsonArray.size(); i++) {
   JSONObject jsonObject = (JSONObject) jsonArray.get(i);
   BeanA bean = (BeanA) JSONObject.toBean( jsonObject, BeanA.class );
   //do whatever you want with each object
}
...