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

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

WBOY
WBOYavant
2023-05-27 12:07:201861parcourir

Étape 1 : Importer les dépendances

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>

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

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":["自由","迫害莱纳"]}
}

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=[自由, 迫害莱纳]}

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":["看书","玩海螺"]}]
}

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

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=[看书, 玩海螺]}]

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer