In meinem Java Spring-Projekt habe ich eine Zeichenfolge eines JSON-Arrays mit Objekten. Ich möchte Daten aus einer Zeichenfolge abrufen und dann in der Datenbank speichern.

Also habe ich: Pojo-Klasse

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

Und ich möchte Daten wie den folgenden Code abrufen:

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);
        }
    }

Aber ich bekomme Fehler:

Anmeldung für mobile Benutzer & gt; Fehler: java.lang.IllegalStateException: BEGIN_OBJECT erwartet, aber BEGIN_ARRAY in Zeile 1, Spalte 2

Wie kann ich diese Kontakte abrufen, ohne das Array zu entfernen?

1
Preeti 4 Jän. 2016 im 11:06

2 Antworten

Beste Antwort

Ihre JSON-Zeichenfolge beginnt und endet mit [], sodass GSON oder Jackson oder ein anderer Parser ein Array analysiert. Um dies zu beheben, müssen Sie dies tun

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());  
1
Murat Karagöz 4 Jän. 2016 im 09:24

Der Inhalt enthält ein Array, während Sie eine einzelne Klasse erwarten. Sie müssen den Listentyp der Kontaktklasse übergeben, indem Sie beispielsweise das Dummy-Feld deklarieren und dessen Typ abrufen:

private static List<Contact> contactTypeField;

...
List<Contact> contacts = new Gson().fromJson(contactreceive,
        MyClass.getDeclaredField("contactTypeField").getGenericType());
0
Zbynek Vyskovsky - kvr000 4 Jän. 2016 im 09:23