Prólogo
Groovy
La gramática básica que explicamos principalmente Groovy
en los últimos artículos , este artículo es la gramática avanzada que explicamos principalmente
operación json, operación xml, operación de archivo
1. Explicación detallada de la operación Json.
Json
Básicamente, hay dos operaciones relacionadas, una es Json
convertir una cadena en un objeto de entidad. Una es convertir nuestro objeto de entidad en una Json
cadena correspondiente . Luego tenemos las Groovy
clases y métodos correspondientes para ayudarnos
groovy.json.JsonSlurper: convierte
json
datos en objetos de entidad groovy.json.JsonOutput: convierte objetos de entidad enjson
datos
1.1 Usa el método propio
Escribamos un ejemplo para ver el efecto.
La primera: el objeto físico se convierte a Json
la vez Groovy
, disponen de un modo directo que me ayude a formatear
segundo: JSON se convertirá en un objeto sólido
que parseText
el parámetro es String
, por lo general, usamos la palabra se puede utilizar directamente parse
, los parámetros de este método es básicamente Admite cualquier tipo, no soloString
1.2 Uso de bibliotecas de terceros
Sabemos que Groovy
es totalmente compatible Java
, por lo que Java
las json
bibliotecas de terceros que se pueden usar (como :, gson
o fastjson
lo Groovy
que sea , también se pueden importar y usar en China, pero la Groovy
que viene con ella es en realidad suficiente para nosotros.
Hablemos sobre cómo importar el paquete jar gson
descargado primero gson
, ponerlo en nuestro directorio libs ( dirección de descarga ),
y luego importar directamente la clase correspondiente en el archivo de script y usar el método correspondiente.
1.3 Análisis de solicitudes de red simuladas
En realidad, básicamente solicitamos datos del servidor, el cliente los convierte en nuestro objeto de entidad y luego muestra nuestro objeto de entidad en nuestra interfaz de usuario o local de almacenamiento. Esto
es un Java
poco diferente al nuestro , Java
en el que debe definir un objeto específico Clase de entidad para analizar, obtener los datos correspondientes después del análisis, pero Groovy
no es necesario definir una clase de entidad específica, podemos obtener directamente los datos que queremos
Operación detallada 2.xml
El mapa mental anterior es Java
dos formas de procesar datos en formato xml, y Groovy
proporcionamos la herramienta de procesamiento xml correspondiente directamente
groovy.xml.XmlSlurper: convierte datos crudos xml en objetos de entidad groovy.xml.MarkupBuilder: convierte objetos de entidad en datos xml
A continuación usaremos
2.1 XML de análisis maravilloso
Primero definimos un xml
final String xml = '''
<response version-api="2.0">
<value>
<books id="1" classification="android">
<book available="20" id="1">
<title>疯狂Android讲义</title>
<author id="1">李刚</author>
</book>
<book available="14" id="2">
<title>第一行代码</title>
<author id="2">郭林</author>
</book>
<book available="13" id="3">
<title>Android开发艺术探索</title>
<author id="3">任玉刚</author>
</book>
<book available="5" id="4">
<title>Android源码设计模式</title>
<author id="4">何红辉</author>
</book>
</books>
<books id="2" classification="web">
<book available="10" id="1">
<title>Vue从入门到精通</title>
<author id="4">李刚</author>
</book>
</books>
</value>
</response>
'''
Json
Hubo uno en la operación antes JsonSlurper
, luego el correspondiente xml
se encontrará por casualidad. XmlSlurper
También tiene un parse
método, que es básicamente el JsonSlurper
mismo que el anterior .
Por ejemplo, queremos generar el nombre del primer libro: Crazy Android Lectures, ¿qué debemos hacer?
Descubrimos que es muy simple y mucho más Java
conveniente que el nuestro , entonces , ¿qué sucede si queremos generar el atributo de etiqueta? Por ejemplo, para obtener el atributo disponible de un libro
2.2 XML transversal
¿Qué debemos hacer si queremos obtener xml
una colección de todos los libros cuyo autor es Li Gang?
Aquí nuestra lógica debería ser encontrar las capas una por una, encontrar books
la colección en la primera capa response.value.books
, luego atravesarla books
, encontrar cada una book
y tomarla la author
mirada no se llama Gang,
vemos los resultados de nuestra producción es el resultado correcto, pero Groovy
de hecho, proporciona un método más sencillo de atravesar
recorrido profundo depthFirst
, hemos logrado de esta manera bajo el efecto de lo anterior
resultado es el mismo, pero por debajo de este Este método es más fácil de usar.
El recorrido profundo naturalmente tiene un recorrido transversal amplio children()
, por ejemplo, queremos obtener el nombre del libro cuyo identificador de atributo de etiqueta es 2.
2.3 Generar XML
Groovy
También puede generar lo que desea xml
, por ejemplo, si pensamos en generar el siguiente, ¿ xml
qué debemos hacer?
/**
* 生成xml格式数据
* <langs type='current' count='3' mainstream='true'>
* <language flavor='static' version='1.5'>java</language>
* <language flavor='dynamic' version='1.6.0'>Groovy</language>
* <language flavor='dynamic' version='1.9'>JavaScript</language>
* </langs>
*/
En primer lugar, vamos a analizar este caso queremos generar xml
, tiene dos nodos, uno langs
de atributos son: type,count.mainstream
, langs
un nodo de abajo hay otro nodo language
, la propiedad es: flavor,version
a continuación, es el correspondiente value
después de empezar la letra clara análisis MarkupBuilder
Sí, se usará una clase aquí . Esta clase es xml
la clase principal para generar datos.
Si language
hay un nodo debajo, ¿cómo obtenerlo? language
Igual que el nodo que especificamos
Pero, en general, en el desarrollo real, a menudo convertimos objetos de entidad de la xml
misma manera que antes.
Primero construimos una Language
clase
//对应xml中的language节点
class Language {
String flavor
String version
String value
}
Luego construye una Langs
clase
//对应xml中的langs节点
class Langs {
String type = 'current'
int count = 3
boolean mainstream = true
def languages = [
new Language(flavor: 'static', version: '1.5', value: 'java'),
new Language(flavor: 'dynamic', version: '1.6.0', value: 'Groovy'),
new Language(flavor: 'dynamic', version: '1.9', value: 'JavaScript')
]
}
Luego generamos uno de acuerdo con nuestro escrito anterior xml
,
también podemos Json
combinarlo con nosotros , la Json
cadena JsonSlurper
genera la clase de entidad y luego MarkupBuilder
genera el correspondientexml
3. Operaciones detalladas del archivo
Importación pensamiento por encima de nosotros Java
en el manejo de archivos en Groovy
que se puede utilizar estos métodos, pero Groovy
también se extiende una serie de métodos más eficientes y potentes (ResourceGroovyMethods)
entonces tenemos algunos ejemplos para las prácticas específicas
que tomamos en Los ejemplos aquí toman este archivo como ejemplo, se genera automáticamente cuando se crea el proyecto y el objeto de
creación File
es Java
exactamente el mismo que el nuestro.
3.1 atravesar el archivo
Primero sacamos el contenido de este archivo, aquí necesitamos usar eachLine
este método
3.2 Obtenga todo el contenido del archivo
Esto es lo mismo que nuestro resultado anterior
3.3 Obtenga una lista de cada línea de texto
Este método devuelve una lista de cada línea en nuestro archivo como un elemento
3.4 Leer una parte de un archivo
Obtenemos los primeros 100 caracteres del archivo
3.5 Copiar archivos
Lo copiamos línea por línea aquí, y también podemos copiarlo todo de una vez, llamamos a este método
Vemos un archivo copiado con éxito, abrimos este archivo
Es exactamente el mismo que el contenido del archivo fuente. También
hay un lugar para tener en cuenta Java
aquí. Necesitamos cerrar manualmente la secuencia al leer y escribir archivos, pero Groovy
podemos omitir este paso porque lo hemos hecho internamente.
Primero veamos el withWriter
método
Continúa bajando,
veamos finally
el método dentro
3.6 Guardar el objeto en un archivo
Aquí se usa un nuevo método withObjectOutputStream
, usamos texto reader和writer
, usamos objetosstream
Escribamos un ejemplo para verificar que
debemos prestar atención aquí: este objeto debe implementar la interfaz de serialización, de lo contrario, informará un error
3.7 Eliminar el objeto del archivo
Tomamos el que acabamos de guardar person
y podemos ver que es lo mismo que guardamos
OK, aquí hemos terminado así, comenzaremos a aprender Gradle
del siguiente artículo, nos vemos en el próximo artículo