Maison > Java > javaDidacticiel > le corps du texte

Comment convertir Json en liste, carte et entité les uns dans les autres en Java

WBOY
Libérer: 2023-05-27 12:07:20
avant
1877 Les gens l'ont consulté

Étape 1 : Importer les dépendances

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>
Copier après la connexion

Étape 2 : Commencez à utiliser

Scénario 1 : Convertir des objets ordinaires (Beans).

1. La conversion de JavaBeans ordinaires en chaînes Json est l'opération la plus couramment utilisée. Créez d'abord une classe simple, telle que Person.

public class Person
{
    private String name;
    private int age;
    private boolean isMale;
    private List<String> hobbies;

    // 省略构造器和getter/setter方法,注意重写toString方法,便于查看控制台输出。

    @Override
    public String toString()
    {
        final StringBuilder sb = new StringBuilder("Person{");
        sb.append("name=&#39;").append(name).append(&#39;\&#39;&#39;);
        sb.append(", age=").append(age);
        sb.append(", isMale=").append(isMale);
        sb.append(", hobbies=").append(hobbies);
        sb.append(&#39;}&#39;);
        return sb.toString();
    }
}
Copier après la connexion

2. Utilisez Gson pour analyser les instances de personne.

1 Créez d'abord l'objet Personne.
2 Création de l'objet Gson.
3 Appelez la méthode String toJson(Object) de Gson pour convertir l'objet en chaîne json.

@Test
public void testBeanToJson()
{
    // 创建Bean
    Person p = new Person("艾伦·耶格尔", 16, true, Arrays.asList("自由", "迫害莱纳"));
    // 创建Gson对象
    Gson gson = new Gson();
    // 调用Gson的String toJson(Object)方法将Bean转换为json字符串
    String pJson = gson.toJson(p);

    System.out.println(pJson);
    // {"name":"艾伦·耶格尔","age":16,"isMale":true,"hobbies":["自由","迫害莱纳"]}
}
Copier après la connexion

3. Convertissez la chaîne json de l'instance Person en objet Person.

Appelez la méthode t fromJson(String, Class) de Gson pour convertir la chaîne Json en un objet

// 调用Gson的 <T> t fromJson(String, Class)方法,将Json串转换为对象
Person person = gson.fromJson(pJson, Person.class);
System.out.println(person);
// Person{name=&#39;艾伦·耶格尔&#39;, age=16, isMale=true, hobbies=[自由, 迫害莱纳]}
Copier après la connexion

Scénario d'utilisation 2 : collection Convert List.

@Test
public void testListToJson()
{
    // 先准备一个List集合
    List<Person> list = new ArrayList<Person>();
    list.add(new Person("三笠·阿克曼", 16, false, Arrays.asList("砍巨人", "保护艾伦")));
    list.add(new Person("阿明·阿诺德", 16, true, Arrays.asList("看书", "玩海螺")));
    System.out.println(list);
    // 创建Gson实例
    Gson gson = new Gson();
    // 调用Gson的toJson方法
    String listJson = gson.toJson(list);
    System.out.println(listJson);
    // [{"name":"三笠·阿克曼","age":16,"isMale":false,"hobbies":["砍巨人","保护艾伦"]},{"name":"阿明·阿诺德","age":16,"isMale":true,"hobbies":["看书","玩海螺"]}]
}
Copier après la connexion

Objet Json vers List

Étant donné que l'interface List a des génériques, si la méthode t fromJson(String, Class) est également appelée, bien que la collection de liste renvoyée soit toujours une collection List, les données de la collection ne sont pas une personne objet, mais un objet Map, et stocke l'attribut Person dans l'instance Map sous la forme de paires clé-valeur. Vérifions-le.

......// 此处延续以上代码
List fromJson = gson.fromJson(listJson, List.class);
System.out.println(fromJson.get(0).getClass());
// class com.google.gson.internal.LinkedTreeMap
Copier après la connexion

Si nous voulons obtenir la même liste qu'avant, nous devons alors appeler la méthode T fromJson(String, Type) de Gson. Comme suit :

Vous pouvez utiliser la classe TypeToken fournie par le package Gson pour obtenir le type Type, puis l'utiliser comme paramètre de cette méthode. Cette classe a un type générique, et ce type générique est le type de chaîne Json convertie en objet (ici, List Nous n'avons pas besoin de remplacer les méthodes de cette classe, il nous suffit de créer une classe interne anonyme de celle-ci). classe et appelez la méthode Just getTpye().

Remarque : assurez-vous d'écrire le type générique de cette classe interne anonyme comme type d'objet généré après l'analyse de la chaîne Json.

......// 此处延续以上代码
// 调用Gson的 T fromJson(String, Type)将List集合的json串反序列化为List对象
List<Person> plist = gson.fromJson(listJson, new TypeToken<List<Person>>(){}.getType());
System.out.println(plist);
// [Person{name=&#39;三笠·阿克曼&#39;, age=16, isMale=false, hobbies=[砍巨人, 保护艾伦]}, Person{name=&#39;阿明·阿诺德&#39;, age=16, isMale=true, hobbies=[看书, 玩海螺]}]
Copier après la connexion

Scénario d'utilisation trois : collection Convertir des cartes.

Les étapes de conversion de Map sont exactement les mêmes que celles de conversion de List. Le code est le suivant. Veuillez consulter Conversion de liste pour plus de détails.

@Test
public void testMapToJson()
{
    Map<String, Person> map = new HashMap<>();
    map.put("p1", new Person("利威尔·阿克曼", 35, true, Arrays.asList("砍猴儿", "打扫卫生")));
    map.put("p2", new Person("韩吉·佐耶", 33, false, Arrays.asList("研究巨人", "讲故事")));

    Gson gson = new Gson();
    String mapJson = gson.toJson(map);

    System.out.println(mapJson);
    // {"p1":{"name":"利威尔·阿克曼","age":35,"isMale":true,"hobbies":["砍猴儿","打扫卫生"]},"p2":{"name":"韩吉·佐耶","age":33,"isMale":false,"hobbies":["研究巨人","讲故事"]}}
    Map<String, Person> jsonMap = gson.fromJson(mapJson, new TypeToken<Map<String, Person>>() { }.getType());
    System.out.println(jsonMap);
}
Copier après la connexion

En général, il existe deux méthodes : toJson() et fromJson

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal