Reversão de Strings JSON e objetos Java [JSON-LIB]
Durante o processo de desenvolvimento, muitas vezes você precisa trocar dados com outros sistemas. Os formatos de troca de dados incluem XML, JSON, etc. JSON é um formato de dados leve que é mais eficiente que o XML. O XML requer muitas tags, que sem dúvida ocupa o tráfego de rede. JSON faz um bom trabalho nesse sentido. Vamos dar uma olhada no formato de JSON.
O JSON pode ter dois formatos, um é o formato de objeto e o outro é objeto de matriz.
{"Nome": "JSON", "Endereço": "Distrito de Xicheng, Pequim", "Age": 25} // String de formato de objeto de json [{"Name": "JSON", "Endereço": "Distrito de Xicheng, Pequim", "Age": 25}] // Formato de Objeto de DadosA partir dos dois formatos acima, podemos ver que a única diferença entre o formato do objeto e o formato do objeto da matriz é que [] é adicionado ao formato do objeto. Em seguida, olhe para a estrutura específica. Pode-se observar que ambos aparecem na forma de pares de valor-chave, separados por vírgulas (,) no estado inglês.
Esse formato também é muito popular quando a transmissão de dados é realizada no front-end e no back-end. O back-end retorna uma string no formato JSON. O front-end usa o método json.parse () em JS para analisar a sequência JSON em um objeto JSON e depois atravessar o front-end.
Vamos ao tópico e apresentar a conversão mútua entre os objetos JSON e Java em Java.
Para realizar a transferência mútua entre os objetos JSON e Java, você precisa usar um pacote JAR de terceiros. Aqui você usa o pacote JSON-Lib Jar. O endereço de download é: https://sourceforge.net/projects/json-lib/. O JSON-LIB requer o apoio de cinco pacotes: Commons-Beanutils-1.8.0.jar, Commons-Collections-3.2.1.jar, Commons-Lang-2.5.jar, Commons-Logging-1.1.jar e Ezmorph-1.0.6.Jar. Você pode baixá -lo da Internet sozinho. O endereço de download não será mais postado aqui.
O JSON-LIB fornece várias classes que podem concluir essa função, como JsonObject, JsonArray. A partir do nome da classe, podemos ver que o JsonObject Transformed deve estar em formato de objeto, enquanto o JSONArray transformado deve ser objetos de matriz (ou seja, com o formulário []).
1. A transferência mútua de objetos comuns java e strings json
Objeto Java-- 》》 String
Um objeto Java normal refere -se a um feijão java em Java, isto é, uma classe de entidade, como
pacote com.cn.study.day3; public class Student {// Nome do nome da string privada; // idade de cordas privadas de idade; // endereço de endereço de sequência privada; public String getName () {Return Name; } public void setName (nome da string) {this.name = name; } public String getage () {Age de retorno; } public void setage (idade da string) {this.age = Age; } public string getAddress () {retornar endereço; } public void setAddress (endereço da string) {this.address = endereço; } @Override public string tostring () {return "Student [name =" + name + ", Age =" + Age + ", endereço =" + endereço + "]"; }}Acima está uma classe de entidade java normal, veja como o JSON-LIB o converte em uma forma de string,
public static void convertrobject () {Student stu = new Student (); stu.setName ("json"); stu.setage ("23"); Stu.setAddress ("Distrito de Beijing Xicheng"); // 1. Use jsonObject jsonObject json = jsonObject.FromObject (STU); // 2. Use JsonArray JsonArray Array = JsonArray.FromObject (STU); String strjson = json.toString (); String strarray = array.toString (); System.out.println ("strjson:"+strjson); System.out.println ("Strarray:"+Strarray); }Definei a aula de entidade de um aluno e depois a converti em Strings JSON usando JsonObject e JsonArray, respectivamente. Vamos ver o resultado impresso abaixo.
strjson: {"endereço": "Distrito de Xicheng, Pequim", "Age": "23", "Nome": "JSON"} Strarray: [{"endereço": "Distrito de Xicheng, Pequim", "Idade": "23", "Nome": "Json"}]A partir dos resultados, podemos ver que ambos os métodos podem converter objetos Java em cordas JSON, mas a estrutura convertida é diferente.
JSON String-》》 Java Objeto
O acima explica como converter objetos Java em Strings JSON. Vamos ver como converter o formato da String JSON em objetos Java.
Primeiro, você precisa definir duas cordas em diferentes formatos, você precisa usar/escapar de cotações duplas.
public static void jSonstrtojava () {// Defina duas cordas em diferentes formatos string objectStr = "{/" name/":/" json/",/" Age/":/" 24/",/" Endereço/":/" Distrito de Xicheng, Pequim/"}"; String Arraystr = "[{/" Nome/":/" JSON/",/" Age/":/" 24/",/" Endereço/":/" Distrito de Xicheng, Pequim/"}]"; // 1. Use jsonObject jsonObject jsonObject = jsonObject.FromObject (ObjectStr); Estudante stu = (estudante) jsonObject.tobean (jsonObject, student.class); // 2. Use JsonArray JsonArray JsonArray = JsonArray.FromObject (Arraystr); // Obtenha o primeiro elemento do objeto JsonArray O = jsonArray.get (0); JsonObject jsonObject2 = jsonObject.FromObject (O); Estudante stu2 = (aluno) jsonObject.tobean (jsonObject2, student.class); System.out.println ("stu:"+stu); System.out.println ("STU2:"+STU2); }O resultado da impressão é:
Stu: Student [Nome = JSON, Idade = 24, Endereço = Distrito de Xicheng, Pequim] Stu2: Student [Nome = JSON, Idade = 24, Endereço = Distrito de Xicheng, Pequim]
Como pode ser visto no código acima, o uso de JsonObject pode facilmente converter strings de formato JSON em objetos Java, mas o uso de JsonArray não é tão fácil, porque possui o símbolo "[]", então depois que obtemos o objeto JsonArray, pegamos o primeiro elemento, que é a deformação do aluno que precisamos e depois usamos o JSONobject para facilitar a obtenção de facilidade.
2. Transferência de listas e cordas JSON
Lista-》》 String json
public static void listtojson () {Student stu = new Student (); stu.setName ("json"); stu.setage ("23"); Stu.setAddress ("Distrito de Beijing Haidian"); List <very Student> lists = new ArrayList <Dentro> (); lists.add (STU); // 1. Use jsonObject // jsonObject listObject = jsonObject.FromObject (listas); // 2. Use jsonArray jsonArray listArray = jsonArray.FromObject (listas); //System.out.println("listObject: "+listObject.toString ()); System.out.println ("listArray:"+listArray.toString ()); }Eu usei o JsonObject para apostar. Vejamos os resultados antes do comentário.
Exceção no thread "Main" net.sf.json.jsonexception: 'objeto' é uma matriz. Use JsonArray em vez disso
Diga -me que há uma exceção. Ao verificar o código -fonte, descobri que, ao usar o método FromObject, primeiro julgarei o tipo de parâmetro. Aqui, eu nos digo que o parâmetro passado é um tipo de matriz porque o ArrayList é usado. Vejamos o resultado após o comentário.
ListArray: [{"endereço": "Distrito Haidiano, Pequim", "Age": "23", "Nome": "JSON"}] Este resultado é normal.
String json-》》 Lista
A partir do exemplo acima, podemos ver que o objeto da lista só pode ser convertido no formato do objeto Array. Então, vamos olhar para a conversão da string para a lista abaixo.
public static void jSontolist () {String Arraystr = "[{/" name/":/" JSON/",/" Age/":/" 24/",/" endereço/":/" Distrito de Xicheng de Pequim/"}]"; // Converta para a lista da lista <Ventul> list2 = (List <very Student>) jsonArray.tolist (jsonArray.FromObject (Arraysttr), Student.class); para (Student Stu: List2) {System.out.println (STU); } // converte para o aluno de matriz [] ss = (estudante []) jsonArray.toArray (jsonArray.FromObject (Arraysttr), Student.class); para (estudante do aluno: ss) {System.out.println (aluno); }}Imprima o resultado,
Estudante [nome = json, idade = 24, endereço = distrito de Xicheng, Pequim] estudante [nome = json, idade = 24, endereço = distrito de Xicheng, Pequim]
Como o formato da string está no formato com "[]", o objeto JsonArray é selecionado aqui, que possui métodos de uso e tolos para uso. O primeiro é convertido em uma matriz em Java, ou em uma lista em Java. Como existe uma classe de entidade aqui para corresponder, o tipo de genérico (Student.class) é especificado ao usá -lo, para que o objeto convertido possa ser obtido.
3. O mapa e a conversão de string json
Mapa-》》 String json
public static void Maptojson () {Student Stu = new Student (); stu.setName ("json"); stu.setage ("23"); stu.setAddress ("Xangai, China"); Mapa <string, stu> map = new Hashmap <string, aluno> (); map.put ("primeiro", 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 ()); }Imprima o resultado,
MapObject {"primeiro": {"endereço": "shanghai," idade ":" 23 "," name ":" json "}} MAPARRAY: [{" primeiro ": {" endereço ":" shanghai, "idade": "23", "name": "json"}}]Dois formulários são impressos acima.
String json-》》 mapa
As cadeias JSON não podem ser diretamente convertidas em objetos de mapa. Para obter o valor correspondente às chaves nos mapas, outros métodos são necessários.
public static void jSontomap () {string strobject = "{/" primeiro/": {/" endereço/":/" shanghai, China/",/" Age/":/" 23/",/" Nome/":/" json/"}}"; // jsonObject jsonObject jsonObject = jsonObject.FromObject (strobject); Mapa mapa = new hashmap (); map.put ("primeiro", Student.class); // O método Tobean é usado e três parâmetros são necessários para MyBean My = (MyBean) JsonObject.Tobean (JsonObject, MyBean.class, mapa); System.out.println (my.getfirst ()); }Imprima o resultado,
Estudante [nome = json, idade = 23, endereço = Xangai, China]
Abaixo está o código do MyBean.
pacote com.cn.study.day4; importar java.util.map; importar com.cn.study.day3.student; classe pública mybean {private Student First; public Student getfirst () {retorna primeiro; } public void setFirst (aluno primeiro) {this.first = primeiro; }} Usando o método Tobean (), três parâmetros são passados, o primeiro é o objeto JsonObject, o segundo é MyBean.class e o terceiro é um objeto de mapa. Através do MyBean, podemos saber que deve haver um primeiro atributo nesta classe, e seu tipo é o aluno, que corresponde aos tipos de chave e valor no mapa, ou seja, o tipo do valor correspondente ao primeiro tipo de chave.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.