[JAVA] Moshi ~ Bibliothèque de conversion Json ~

J'avais l'habitude de gérer json en java, donc quand je cherchais une bibliothèque, on m'a dit comment l'utiliser: lunettes de soleil:

Qu'est-ce que Moshi

GitHub Il s'agit d'une bibliothèque publiée par square sur GitHub.

Il analyse JSON en classes et, à l'inverse, sérialise les classes en JSON. C'est facile à utiliser.

Usage

Gradle

compile 'com.squareup.moshi:moshi:1.5.0'

Il suffit d'ajouter

Parse

Créer une classe à analyser


class PersonList {
    Map<String, Person> list;
}

class Person {
    int age;
    Sex sex;
}

enum Sex {
    MAN,
    WOMAN
}

Cliquez ici pour la partie à analyser

String json = "xxxxxxx";

Moshi moshi = new Moshi.Builder().build();
JsonAdapter<PersonList> jsonAdapter = moshi.adapter(PersonList.class);

try {
    PersonList personList = jsonAdapter.fromJson(json);
} catch (Exception e) {
    Log.e("json parse error", "parsePersonList: ", e);
}

C'est ça (rires)

Serialize

Cliquez ici pour la partie sérialisation

PersonList list = /*Créer*/

Moshi moshi = new Moshi.Builder().build();
JsonAdapter<PersonList> jsonAdapter = moshi.adapter(PersonList.class);

try {
   String json = jsonAdapter.toJson(list);
} catch (Exception e) {
    Log.e("json serialize error", "serializePersonList: ", e);
}

Presque les mêmes, mais fromJson () et toJson () ont changé

Caution

Veuillez noter que les classes qui peuvent être utilisées sont limitées. ʻArrayListHashMap etc. ne peuvent pas être utilisés, alors utilisons ListMap`

・ Primitives (int, float, char ...) et leurs homologues encadrés (Integer, Float, Character ...). ・ Tableaux, collections, listes, ensembles et cartes ・ Cordes ・ Enums

CustomAdapter

class PersonAdapter {
    @ToJson String toJson(Person person) {
      return String.valueOf(person.age) + sex.suit.name().substring(0, 1);
    }

    @FromJson Person fromJson(String json) {
        return //Analyser String et créer une classe Person
    }
}

Je suis désolé d'avoir omis l'analyse des chaînes: sob:

Au fait, un autre

class ForthPerson {
    int forthAge;
    Sex sex;
}

S'il existe une classe de personnes quatre fois plus âgées que les gens ordinaires (rires), elle peut être convertie au moment de l'analyse

class ForthPersonAdapter {
  @FromJson ForthPerson fromJson(Person person) {
    ForthPerson forthPerson = new ForthPerson();
    forthPerson.age = person.age * 4;
    forthPerson.sex = person.sex;
    return forthPerson;
  }

  @ToJson Person toJson(ForthPerson forthPerson) {
    Person person = new Person();
    person.age = forthPerson.age / 4;
    person.sex = forthPerson.sex;
    return person;
  }
}
Moshi moshi = new Moshi.builder()
        .add(new ForthPersonAdapter())
        .build();

Vous pouvez l'utiliser maintenant!

Get List

Vous pouvez également obtenir un tableau de classes

String json = "xxxxxxx";

Type type = Types.newParameterizedType(List.class, Person.class);
JsonAdapter<List<Person>> adapter = moshi.adapter(type);
List<Person> people = adapter.fromJson(json);

Vous pouvez obtenir un tableau de classes Person dans personnes

Recommended Posts

Moshi ~ Bibliothèque de conversion Json ~
Conversion entre objets Java et JSON à l'aide de Moshi
[Jackson] Classe de conversion d'objet JSON