Gson und die Argonauten - Problem JavaScript-Array Umwandlung zu json string, auf Java pojo Gson verwenden. Der Versuch, meine Strukturen korrekt zu erhalten

StackOverflow https://stackoverflow.com/questions/3657497

  •  01-10-2019
  •  | 
  •  

Frage

Hier ist meine json string, dass ich in Java bin acessing:

json = 
[
    {"id":"123456","Data":"skill2","dmlcrud":false},
    {"id":"123456","Data":"skill3","dmlcrud":true},
    {"id":"123456","Data":"skill14","dmlcrud":true},
    {"id":"123321","Data":"skill1","dmlcrud":false},
    {"id":"123321","Data":"skill14","dmlcrud":false}
]

Ich möchte jetzt es in einer Sammlung setzen, um im Idealfall / theoretisch würde ich tun möchte:

List<Person> personList = new Gson().fromJson(json, Person.class);

und personList.size () würde = 5. Ich würde dann durch person Schleife und die Vorform meiner entsprechenden Maßnahmen.

Allerdings ist mein Verständnis ist, dass ich brauchen würde, eine Container-Klasse erstellen, die sich die Person Liste enthalten? So anstelle von (öffentlichen Getter / Setter der Kürze entfernt, wahrscheinlich Syntax errror dort als gut).

Class Person {
   private integer id;
   private String Data;
   private Boolean dmlCrud ;
}

Ich würde wirklich brauchen so etwas wie?

Class container{
   List<Person> personList;


   static class Person {
      private integer id;
      private String Data;
      private Boolean dmlCrud ;
   }
}

Allerdings würde ich dann müssen die JavaScript-json verändern somethign anders als gut zu sein? Welche scheint eher problematisch, da bin ich die JSON-String aus einer Javascript-Array erstellen, mit JSON.stringifier.

Jede Hilfe dankbar angenommen.

Bearbeiten

die Lösung, die ich verwenden, um hinzuzufügen

public List<Person> personList;

an der Person Klasse und verändern das JSON-Objekt so, dass es

{ "personList" :
    [
        {"id":"123456","Data":"skill2","dmlcrud":false},
        {"id":"123456","Data":"skill3","dmlcrud":true},
        {"id":"123456","Data":"skill14","dmlcrud":true},
        {"id":"123321","Data":"skill1","dmlcrud":false},
        {"id":"123321","Data":"skill14","dmlcrud":false}
    ]
}

der Gson Anruf kann dann

Person person = new Gson().fromJson(json, Person.class);

und die in einer Liste zugegriffenen Daten wie so

List<Person> personList = person.getPersonList();

EDIT 2

Eine zweite, besser, diese Lösung ist json Array verwenden

[
        {"id":"123456","Data":"skill2","dmlcrud":false},
        {"id":"123456","Data":"skill3","dmlcrud":true},
        {"id":"123456","Data":"skill14","dmlcrud":true},
        {"id":"123321","Data":"skill1","dmlcrud":false},
        {"id":"123321","Data":"skill14","dmlcrud":false}
]

und verwenden Sie dann

Type listType = new TypeToken<List<SkillsGsonTO>>() {}.getType();
List<Person> personList  = new Gson().fromJson(json,listType);
Person person1 = personList.get(0);

, wo die ursprüngliche Klasse wird verwendet,

Class Person {
       private integer id;
       private String Data;
       private Boolean dmlCrud ;
    }
War es hilfreich?

Lösung

Sie könnten eine Container-Klasse verwenden, aber dies ist nur sinnvoll, wenn Sie zusätzliche Eigenschaften auf der Personenliste versenden müssen. Ist dies nicht der Fall ist, könnte man genauso gut auf eine java.util.List konvertieren. Ich glaube, Sie brauchen den „Namen“ der Liste Eigenschaft als Stammelement in Ihrem JSON-String angeben. So zum Beispiel, wenn Sie Domain-Objekt ist eine Liste der Person Objekte, als Ihr JSON Wurzelelement ist: „Personen“ oder „person“. Sie sind also JSON könnte etwa so aussehen:

"persons" : {[
     {"id":"123456","Data":"skill2","dmlcrud":false},
     {"id":"123456","Data":"skill3","dmlcrud":true},
     {"id":"123456","Data":"skill14","dmlcrud":true},
     {"id":"123321","Data":"skill1","dmlcrud":false},
     {"id":"123321","Data":"skill14","dmlcrud":false}
]}

Ich konnte ein wenig mit der Syntax abbiß sein, aber es sollte etwas ähnliches wie das sein. Um es zusammenzufassen:

In Ihrem Fall können Sie Ihnen ist Klasse Person unberührt lassen und Gson sollte in der Lage sein, die Liste Personen, die für Sie von dem JSON-String zu erstellen, schlug ich vor.

Von der Gson API-Dokumentation: Wenn das Objekt, dass Ihr sind Deserialisieren ein ParameterizedType (das heißt mindestens einen Typ-Parameter und kann ein Array sein), dann müssen Sie indem die fromJson (String, Type) Methode verwenden. Hier ist ein Beispiel für deserialing eine ParameterizedType:

 Type listType = new TypeToken<List<String>>() {}.getType();

 Gson gson = new Gson();
 List<String> target2 = gson.fromJson(json, listType);

Also in Ihrem Fall wäre es:

Type listType = new TypeToken<List<Person>>() {}.getType();
List<Person> persons = new Gson().fromJson(json, listType);

wo json ist Ihr JSON-String offensichtlich

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top