Inversion des cordes JSON et des objets Java [JSON-lib]
Pendant le processus de développement, vous devez souvent échanger des données avec d'autres systèmes. Les formats d'échange de données incluent XML, JSON, etc. JSON, en tant que format de données léger, est plus efficace que XML. XML nécessite beaucoup de balises, qui occupent sans aucun doute le trafic réseau. JSON fait du bon travail à cet égard. Jetons un coup d'œil au format de JSON.
JSON peut avoir deux formats, l'un est un format d'objet et l'autre est un objet Array.
{"Name": "JSON", "Adresse": "District de Xicheng, Pékin", "Age": 25} // String Format d'objet de JSON [{"Name": "JSON", "Adresse": "District Xicheng, Pékin", "Age": 25}] // Format d'objet de donnéesD'après les deux formats ci-dessus, nous pouvons voir que la seule différence entre le format d'objet et le format d'objet Array est que [] est ajouté au format d'objet. Regardez ensuite la structure spécifique. On peut voir qu'ils apparaissent tous les deux sous la forme de paires de valeurs clés, séparées par des virgules (,) dans l'état anglais.
Ce format est également très populaire lorsque la transmission des données est effectuée dans le frontal et le back-end. Le back-end renvoie une chaîne au format JSON. Le front-end utilise la méthode json.psse () en js pour analyser la chaîne JSON dans un objet JSON, puis la traversée pour que le frontal puisse utiliser.
Passons au sujet et présentons la conversion mutuelle entre les objets JSON et Java en Java.
Pour réaliser le transfert mutuel entre les objets JSON et Java, vous devez utiliser un package JAR tiers. Le package JSON-LIB est utilisé ici. L'adresse de téléchargement est: https://sourceforge.net/projects/json-lib/. Json-lib nécessite le support de cinq packages: Commons Beanutils-1.8.0.jar, Commons-Collections-3.2.1.jar, Commons-Lang-2.5.Jar, Commons-Logging-1.1.jar et ezmorph-1.0.6.jar. Vous pouvez le télécharger sur Internet par vous-même. L'adresse de téléchargement ne sera plus publiée ici.
JSON-Lib fournit plusieurs classes qui peuvent remplir cette fonction, comme JSONObject, JSONArray. D'après le nom de la classe, nous pouvons voir que le jsonObject transformé doit être au format objet, tandis que le jsonarray transformé doit être des objets de tableau (c'est-à-dire avec la forme []).
1. Le transfert mutuel des objets ordinaires Java et des cordes JSON
Objet Java-- 》》 String
Un objet Java normal fait référence à un Java Bean en Java, c'est-à-dire une classe d'entité, comme
package com.cn.study.day3; classe publique Student {// nom name de chaîne privée; // vieillit d'âge de cordes privées; // Adresse d'adresse de chaîne privée; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public String Getage () {return Age; } public void Setage (String Age) {this.age = age; } public String getAddress () {return adresse; } public void setAddress (adresse de chaîne) {this.address = adresse; } @Override public String toString () {return "Student [name =" + name + ", age =" + age + ", adresse =" + adresse + "]"; }}Ci-dessus est une classe d'entité Java normale, voir comment Json-Lib le convertit en une forme de chaîne,
public static void convertObject () {Student Stu = new Student (); Stu.SetName ("JSON"); Stu.Setage ("23"); Stu.setAddress ("District de Pékin Xicheng"); // 1. Utilisez JSONObject JSONObject JSON = JSONObject.FromObject (STU); // 2. Utilisez JSONArray JSONArray Array = JSONArray.FromObject (STU); String strjson = json.toString (); String starray = array.toString (); System.out.println ("strjson:" + strjson); System.out.println ("StraRray:" + StraRray); }J'ai défini le cours d'entité d'un élève, puis je l'ai converti en chaînes JSON en utilisant respectivement JSONObject et JSONArray. Voyons le résultat imprimé ci-dessous.
Strjson: {"Address": "District de Xicheng, Beijing", "Age": "23", "Name": "JSON"} StraRray: [{"Address": "Xicheng District, Beijing", "Age": "23", "Name": "JSON"}]D'après les résultats, nous pouvons voir que les deux méthodes peuvent convertir des objets Java en chaînes JSON, mais la structure convertie est différente.
JSON String - 》》 objet Java
Ce qui précède explique comment convertir les objets Java en cordes JSON. Voyons comment convertir le format de chaîne JSON en objets Java.
Tout d'abord, vous devez définir deux chaînes dans différents formats, vous devez utiliser / échapper à deux citations.
public static void jsonsttojava () {// définir deux chaînes dans différents formats string objectstr = "{/" name / ": /" json / ", /" age / ": /" 24 / ", /" adresse / ": /" district de Xicheng, beijing / "}"; String arraystr = "[{/" name / ": /" JSON / ", /" Age / ": /" 24 / ", /" Adresse / ": /" Xicheng District, Beijing / "}]"; // 1. Utilisez JSONObject JSONObject JSONObject = JSONObject.FromObject (Objectstr); Student Stu = (Student) JSONObject.Tobean (JSONObject, Student.class); // 2. Utilisez JSONArray JSONArray JSONArray = JSONArray.FromObject (Arraystr); // Obtenez le premier élément de l'objet JSONArray o = jsonArray.get (0); JSONObject JSONObject2 = JSONObject.FromObject (o); Student Stu2 = (Student) JSONObject.Tobean (JSONObject2, Student.class); System.out.println ("Stu:" + Stu); System.out.println ("Stu2:" + Stu2); }Le résultat de l'impression est:
Stu: Étudiant [nom = JSON, âge = 24, adresse = district de Xicheng, Pékin] Stu2: Étudiant [Name = JSON, âge = 24, adresse = district de Xicheng, Pékin]
Comme on peut le voir à partir du code ci-dessus, l'utilisation de JSONObject peut facilement convertir les chaînes de format JSON en objets Java, mais l'utilisation de JSONArray n'est pas si facile, car elle a le symbole "[]", donc après avoir obtenu l'objet JSONArray, nous prenons le premier élément, qui est la déformation de l'étudiant dont nous avons besoin, puis utilisons JSONObject pour l'obtenir facilement.
2. Transfert de listes et de chaînes JSON
LISTE - 》》 JSON String
public static void listTojson () {étudiant Stu = new Student (); Stu.SetName ("JSON"); Stu.Setage ("23"); Stu.setAddress ("District de Pékin Haidian"); List <Student> lists = new ArrayList <Student> (); listS.Add (STU); // 1. Utilisez jsonObject // JSONObject listObject = jsonObject.FromObject (lists); // 2. Utilisez JSONArray JSONArray listArray = JSONArray.FromObject (listes); //System.out.println("ListObject: "+ listObject.toString ()); System.out.println ("listArray:" + listArray.ToString ()); }J'ai utilisé JSONObject pour parier. Examinons les résultats avant le commentaire.
Exception dans Thread "Main" net.sf.json.jsonexception: «Object» est un tableau. Utilisez JSONArray à la place
Dites-moi qu'il y a une exception. En vérifiant le code source, j'ai constaté que lors de l'utilisation de la méthode NUROBject, je jugerai d'abord le type de paramètre. Ici, je nous dis que le paramètre passé est un type de tableau car la liste Array est utilisée. Examinons le résultat après le commentaire.
Listarray: [{"Address": "District Haidian, Pékin", "Age": "23", "Name": "JSON"}] Ce résultat est normal.
JSON String - 》》 Liste
D'après l'exemple ci-dessus, nous pouvons voir que l'objet List ne peut être converti que dans le format de l'objet Array. Examinons donc la conversion de la chaîne à la liste ci-dessous.
public static void jSontolist () {String arraystr = "[{/" name / ": /" JSON / ", /" Age / ": /" 24 / ", /" Address / ": /" Beijing Xicheng District / "}]"; // converti en liste List <Student> list2 = (list <Student>) jsonArray.tolist (jsonArray.fromObject (Arraystr), student.class); pour (Student Stu: list2) {System.out.println (Stu); } // Converti en Array Student [] SS = (Student []) JSONArray.toArray (JSONArray.FromObject (Arraystr), Student.Class); pour (étudiant étudiant: ss) {System.out.println (étudiant); }}Imprimez le résultat,
Student [name = json, âge = 24, adresse = district de Xicheng, Pékin] étudiant [name = json, âge = 24, adresse = district de Xicheng, Pékin]
Étant donné que le format de la chaîne se trouve dans le format avec "[]", l'objet JSONArray est sélectionné ici, qui a des méthodes pour une utilisation. Le premier est converti en un tableau en Java, ou en liste à Java. Puisqu'il existe une classe d'entité ici à correspondre, le type de générique (Student.class) est spécifié lors de l'utilisation, de sorte que l'objet converti peut être obtenu.
3. La conversion de la carte et de la chaîne JSON
Carte - 》》 JSON String
public static void Maptojson () {Student Stu = new Student (); Stu.SetName ("JSON"); Stu.Setage ("23"); Stu.setAddress ("Shanghai, Chine"); Map <string, stu> map = new hashmap <string, student> (); map.put ("First", Stu); // 1. JSONObject JSONObject MapObject = JSONObject.FromObject (MAP); System.out.println ("MapObject" + MapObject.ToString ()); // 2. JSONArray JSONArray MapArray = JSONArray.FromObject (Map); System.out.println ("MapArray:" + MapArray.ToString ()); }Imprimez le résultat,
MapObject {"First": {"Address": "Shanghai," Age ":" 23 "," Name ":" JSON "}} MapArray: [{" First ": {" Address ":" Shanghai, "Age": "23", "Name": "JSON"}}]Deux formulaires sont imprimés ci-dessus.
JSON String - 》》 Carte
Les cordes JSON ne peuvent pas être converties directement en objets de carte. Afin d'obtenir la valeur correspondant aux clés dans les cartes, d'autres méthodes sont nécessaires.
public static void jSontoMap () {string strobject = "{/" premier / ": {/" adresse / ": /" shanghai, chinois / ", /" age / ": /" 23 / ", /" name / ": /" json / "}}"; // jsonObject JSONObject JSONObject = jsonObject.FromObject (strobject); Map map = new HashMap (); map.put ("First", Student.class); // La méthode Tobean est utilisée, et trois paramètres sont nécessaires pour MyBean My = (MyBean) JSONObject.Tobean (JSONObject, MyBean.class, Map); System.out.println (my.getFirst ()); }Imprimez le résultat,
Étudiant [nom = JSON, âge = 23, adresse = Shanghai, Chine]
Vous trouverez ci-dessous le code de Mybean.
package com.cn.study.day4; import java.util.map; import com.cn.study.day3.student; classe publique MyBean {Student privé en premier; Étudiant public getFirst () {retourne d'abord; } public void setFirst (Student First) {this.first = premier; }} En utilisant la méthode tabean (), trois paramètres sont passés, le premier est l'objet JSONObject, le second est MyBean.Class, et le troisième est un objet MAP. Grâce à MyBean, nous pouvons savoir qu'il doit y avoir un premier attribut dans cette classe, et son type est étudiant, ce qui correspond aux types de clé et de valeur dans la carte, c'est-à-dire le type de la valeur correspondant au premier type de clé.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.