2016-01-04 1 views
1

В моем проекте java spring у меня есть строка json-массива с объектами. Я хочу получать данные из строки, а затем сохранять в базу данных.json array с объектами, не получающими

Итак, у меня есть: POJO класс

public class Contact { 
    private String id; 
    private String name; 
    private String mobile; 
    //getters and settrs & constructors 
    } 

, и я хочу, чтобы получить данные, как показано ниже код:

String stringdata=["{"id":"1","mobile":"1860108","name":"Intex"}", 
"{"id":"21","mobile":"777717717","name":"pari"}", 
"{"id":"26","mobile":"172676236","name":"pari2"}"]; 

     try { 
    Contact contact1 = new Contact(); 

     try { 

    contact1 = new Gson().fromJson(contactreceive, Contact.class); 

     } 
      catch (UnsupportedEncodingException uee) { 

      return new ResponseEntity<Object>("failed", HttpStatus.EXPECTATION_FAILED); 
     } 

     Contact contact = new Contact(contact1.getId(),contact1.getName(),contact1.getMobile()); 
     userDao.saveContact(contact); 

      return new ResponseEntity<Object>("created", HttpStatus.CREATED); 



     } catch (Exception e) { 

      logger.error("Mobile User Signup > Error: " + e.getMessage()); 

      return new ResponseEntity<Object>(HttpStatus.NO_CONTENT); 
     } 
    } 

Но я получаю ошибку:

мобильных пользователей Регистрация > Ошибка: java.lang.IllegalStateException: ожидается BEGIN_OBJECT, но BEGIN_ARRAY в строке 1 столбец 2

без удаления массива, как я могу получить эти контакты?

+2

попытаться обернуть его как { «данные»: [ваш массив идет здесь]} –

+0

вы тратите другие пользователи времени, показывая пример кода, который содержит переменные, не объявлены и не имеют объяснений. Вы объявляете stringdata, который не используется, и используйте userDao, который не объявлен. Кроме того, вы должны правильно отформатировать свой код – Christian

+0

@Christian Я думаю, вы не понимали, что это всего лишь фрагмент кода. Если он отправил предложение об ошибке, тогда скомпилированный код. Что касается времени, то все, кто размещает здесь в SO (включая вас), тратят время другого пользователя. :) – Paulo

ответ

1

Вашего JSON строка начинается и заканчивается [] так GSON или Jackson или любой другой анализатор будет анализировать массив. Поэтому для того, чтобы исправить это, вы должны сделать это

List<Contact> contact1 = new ArrayList<>(); 
contact1 = new Gson().fromJson(contactreceive, Contact.class); 
Contact contactObject = contact1.get(0); 
Contact contact = new Contact(contactObject.getId(),contactObject.getName(), 
           contactObject.getMobile()); 
+0

Контакт contactObject = contact1 [0]; Я получаю сообщение об ошибке: - Тип выражения должен быть типом массива, но он решил Список Preeti

+0

@Preeti Упс, я установил его –

0

Содержимое содержит массив, пока вы ожидаете одного класса. Вам необходимо пройти тип списка Контактного класса, сделать это, например, объявляя фиктивное поле и получить его тип:

private static List<Contact> contactTypeField; 

... 
List<Contact> contacts = new Gson().fromJson(contactreceive, 
     MyClass.getDeclaredField("contactTypeField").getGenericType()); 
+0

здесь, MyClass - это какой класс ???? – Preeti

+0

Класс из вашего примера, который содержит фактический синтаксический код. –