2017-09-05 1 views
1

Ich habe ein Json wie diese, ich habe diese Aufgabe Mapper mit einer Klasse kartieren, wo ich Auth als JsonNode in der Klasse UserData.javaWie wird der dynamische Schlüssel in einem JSON-Knoten einer Klasse zugeordnet?

{ 
    "auth": [ 
    { 
     "user_admin": [ 
     { 
      "name": [ 
      "harry" 
      ], 
      "department": [ 
      "MC" 
      ], 
      "userid": [ 
      "1234" 
      ] 
     } 
     ] 
    }, 
    { 
     "user_employee": [ 
     { 
      "name": [ 
      "stella" 
      ], 
      "department": [ 
      "CC" 
      ], 
      "role": [ 
      "employee" 
      ] 
     } 
     ] 
    } 
    ], 
    "language":"english", 
    "sub": "f598ab" 

} 

I json angesehen haben Knoten verwendet haben auth, um es wie folgt einer Klasse UserData.java zuzuordnen.

@[email protected] 
    private JsonNode authorization; 
    @[email protected] 
    private String language; 
    @[email protected] 
    private String sub; 

Jetzt möchte ich die Werte user_admin und user_employee abzubilden, die zu einer anderen Klasse dynamisch sind, die Namen haben, Abteilung, Benutzer-ID. Ich habe eine Klasse auth.java erstellt und diesen Code darin eingefügt.

@Getter @Setter 
     private List< String> name; 

     @Getter @Setter 
     private List<String> department; 

     @Getter @Setter 
     private List<String> userid; 
     @Getter @Setter 
     private List<String> role; 

jetzt habe ich den Code unten versucht, es auf der Karte, aber seine Arbeit nicht, dass ich

UserData mappedObject= (UserData)commonUtils.readJsonStringRespondToObjRequest((json), UserData.class); 
Auth roleData= mapper.treeToValue(mappedObject.getAuth(), Auth.class); 

Fehler bekomme ich bekam ist

Can not deserialize instance of Auth.java out of START_ARRAY 
+0

Versuchen Sie die Deserialisierung in ein Array von Auth statt eines einzelnen Auth-Objekts. – alayor

+0

wie geht das? @alayor – maya

Antwort

0

Da Ihre JSON Struktur auth ist ein array müssen Sie das in ein Array von Auth Objekte konvertieren.

Auth[] roleData = mapper.treeToValue(mappedObject.getAuth(), Auth[].class); 

Auch in Ihrer Auth Klasse sollten Sie diese Eigenschaften haben.

class Auth { 
    @Getter @Setter 
    UserAdmin user_admin; 
    @Getter @Setter 
    UserEmployee user_employee; 
    @Getter @Setter 
    String language; 
    @Getter @Setter 
    String sub; 
} 

Dann in UserAdmin und UserEmployee, sollten Sie die Felder müssen jede Eigenschaft in JSON (Name, Abteilung, etc.) entsprechen.

+0

Er gibt mir das unerwartete Feld user_admin, da user_admin und user_employee dynamisch sind @alayor – maya

+0

Der Fehler liegt daran, dass die 'Auth'-Klasse keine Felder' user_admin' und 'user_employee' hat. – alayor

+0

diese Werte sind dynamisch, und ändert sich von Antwort zu Antwort, Wie man sie ergreift, Das ist, wo ich seit langer Zeit feststecke, bitte helfen Sie mir mit diesem @alayor – maya

Verwandte Themen