PDF de programación - Programación en C moderno

Imágen de pdf Programación en C moderno

Programación en C modernográfica de visualizaciones

Publicado el 27 de Mayo del 2021
951 visualizaciones desde el 27 de Mayo del 2021
210,8 KB
59 paginas
Creado hace 9a (10/04/2015)
Programación en C moderno

Álvaro Neira Ayuso <[email protected]>

1

b) Libjansson (JSON): Biblioteca
para exporta e importar datos en

formato JSON.

● Introducción: Historia, tipos de objetos y software necesario.
● Estructura estándar de JSON.
● Ejemplo 1: Procesado, recorrido e impresión de un árbol sencillo.

– Uso de funciones para procesar cadenas.
– Uso de funciones para recorrer el árbol
– Impresión del contenido del árbol

● Ejemplo 2: Procesado, recorrido e impresión de arboles con listas.
● Ejemplo 3: Lectura y escritura de ficheros en formato JSON.
● Ejemplo 4: Herramientas para validar la estructura de JSON.

2

Historia

● JSON, acrónimo de JavaScript Object
Notation, es un formato ligero para el
intercambio de datos.

● Cada vez hay más soporte de JSON mediante
el uso de paquetes escritos por terceras parte.
● En diciembre de 2005 Yahoo! comenzó a dar
soporte opcional de JSON en algunos de sus
servicios web.

3

Historia

● El formato de JSON fue especificado por

Douglas Crockford.

● Douglas Crockford es un programador
Americano, el cuál es desarrollador de
Javascript

● Actualmente es un diseñador y desarrollador

Senior de Javascript para Paypal

4

Douglas Crockford

5

Historia: Jansson

● Jansson, biblioteca en C para codificar, decodificar

y manipular datos en formato JSON.
● Sus principales características son:

– Simple e intuitiva API y modelo de datos.
– Documentación clara y accesible
– Ninguna dependencia con otras bibliotecas
– Soporte total con formato unicode (UTF-8)

● Jansson esta licenciado bajo licencia MIT.

6

Software necesario

● libjansson4
● libjansson-dbg
● libjansson-dev
● libjansson-doc

7

Formato JSON

8

Formato JSON

9

Formato JSON

10

Formato JSON

11

Formato JSON

12

Usar y compilar biblioteca jansson

● #include <jansson.h>

Biblioteca que contiene todas las funciones y
tipos de jansson

● gcc -o prog prog.c -ljansson

Flag para activar el uso de libjansson

13

Jansson: String

Jansson usa UTF-8 como formato de
codificación de caracteres

● json_t *json_string(const char *value)

Devuelve un nuevo objeto JSON de tipo string
o NULL en caso de error.

14

Jansson: String

● size_t json_string_length(const json_t *string)
Devuelve el tamaño del string contenido en el
objeto JSON de tipo string

● int json_string_set(const json_t *string, const

char *value)
Establece la cadena value en el objeto JSON
de tipo string.

15

Jansson: String

● const char *json_string_value(const json_t

*string)
Devuelve la cadena contenida en el objeto
JSON de tipo string

16

Jansson: Enteros

● Json solo tiene un tipo número “number”.
● Dicho tipo de número contiene tanto enteros como

float

● El objeto de tipo JSON json_int_t contiene el número.

json_t *json_integer(json_int_t value)
Devuelve un tipo número o NULL en caso de error

17

Jansson: Enteros

● int json_integer_set(const json_t *integer,

json_int_t value)
Establece el valor integer en el objeto JSON de
tipo number. Devuelve 0 en caso correcto y -1 en
caso de error.

● json_int_t json_integer_value(const json_t *integer)
● Devuelve el valor comprendido en el objeto JSON

de tipo número.

18

Jansson: Real

● json_t *json_real(double value)

Devuelve un JSON de tipo real o NULL en caso de
error.

● int json_real_set(const json_t *real, double value)

Establece el valor de tipo real “value”, en el objeto
JSON de tipo real. Devuelve 0 en caso de éxito y -1
en caso de error.

19

Jansson: Real

● double json_real_value(const json_t *real)
Devuelve el valor real asociado dentro del
objeto JSON de tipo real

20

Jansson: Array

Un objeto de tipo JSON de tipo array es una
colección ordenada de objetos JSON de tipo
valor.

● json_t *json_array(void)

Devuelve un nuevo objeto JSON de tipo array.
Devuelve nulo en caso de error. Al inicializarlo
el array está vacío.

21

Jansson: Array

● size_t json_array_size(const json_t *array)

Devuelve el número de elementos del array o 0 si el
array es nulo.

● json_t *json_array_get(const json_t *array, size_t

index)
Devuelve el elemento comprendido en la posición
“index” del objeto JSON de tipo array. En caso de
error, devuelve NULL.

22

Jansson: Array

● int json_array_set(json_t *array, size_t index,

json_t *value)
Reemplaza el elemento comprendido en la
posición index por el objeto JSON de tipo
valor “value”. Devuelve 0 en caso de éxito y -1
en caso de error.

23

Jansson: Array

● int json_array_append(json_t *array, json_t *value)

Añade el elemento al final del array. Devuelve 0 en caso de
éxito, -1 en caso de error.

● int json_array_insert(json_t *array, size_t index, json_t *value)
Inserta el valor en la posición index del array, moviendo todos
los valores una posición a la derecha. Devuelve 0 en caso de
éxito y -1 en caso de error.

24

Jansson: Array

● int json_array_remove(json_t *array, size_t

index)
Borra el elemento comprendido en la posición
index del array. Devuelve 0 en caso de éxito,
-1 en caso de error.

25

Jansson: Array

● json_array_foreach(array, index, value)

Itera por todos los elementos comprendidos
en el array. Devolviendo cada elemento y la
posición de él mismo.

26

Jansson: Array

/* array is a JSON array */
size_t index;
json_t *value;

json_array_foreach(array, index, value) {
/* block of code that uses index and value */

}

27

Jansson: Objeto

● Un objeto JSON de tipo objeto es un

diccionario de pares clave-valor, donde la
clave es una cadena y el valor un objeto
JSON de tipo valor.

● json_t *json_object(void)

Devuelve un objeto JSON de tipo objeto y
NULL en caso de error.

28

Jansson: Objeto

● size_t json_object_size(const json_t *object)

Devuelve el número de elementos comprendidos en
el objeto.

● json_t *json_object_get(const json_t *object, const

char *key)
Devuelve el valor correspondiente a la clave del
objeto. Devuelve nulo en caso de error o si no
encuentra la clave.

29

Jansson: Objeto

● int json_object_set(json_t *object, const char

*key, json_t *value)
Establece el par clave-valor en el objeto. Si ya
existe un par con dicho clave-valor, se
reemplaza con el nuevo valor. Devuelve 0 en
caso de éxito, -1 en caso de error.

30

Jansson: Objeto

● int json_object_del(json_t *object, const char

*key)
Borra el par clave-valor del objeto si existe.
Devuelve 0 en caso de éxito, y -1 en caso de
error o si no encuentra la clave dentro del
objeto.

31

Jansson: Objeto

● json_object_foreach(object, key, value)
Itera por todas los pares clave-valor del
objeto. Devolviendo cada clave y su valor
relacionado.

32

Jansson: Objeto

/* obj is a JSON object */
const char *key;
json_t *value;

json_object_foreach(obj, key, value) {

/* block of code that uses key and value */

}

33

Jansson: Objeto

● void *json_object_iter(json_t *object)

Devuelve un iterador que puede ser usado
para iterar por todas los pares clave-valor del
objeto. Devuelve NULL si el objeto esta vacío.

34

Jansson: Objeto

● const char *json_object_iter_key(void *iter)

Devuelve la clave asociado al par clave-valor
actual del iterador.

● json_t *json_object_iter_value(void *iter)

Devuelve el valor asociado al par clave-valor
actual del iterador

35

Jansson: Objeto

● void *json_object_iter_next(json_t *object, void

*iter)
Devuelve un puntero al iterador el cuál a
cambiado el par clave-valor actual por el
siguiente. Devuelve NULL en el caso que no
haya mas elementos.

36

Jansson: Objeto

/* obj is a JSON object */
const char *key;
json_t *value;

void *iter = json_object_iter(obj);
while(iter)
{

key = json_object_iter_key(iter);
value = json_object_iter_value(iter);
/* use key and value ... */
iter = json_object_iter_next(obj, iter);

}

37

Jansson: Error

● Jansson usa una estructura llamada

json_error_t para almacenar útil para reportar
errores al usuario.
Dicha estructura contiene una serie de
atributos como:
– char text[]: El cuál contiene la descripción del

error

– char source[]: El origen del error

38

Jansson: Error

● Int line: El número de línea donde se ha

producido el error

● Int column: El número de columna donde se

ha producido el error

● size_t position: La posición en bytes donde

comienza el error.

39

Jansson: Error

int main() {
json_t *json;
json_error_t error;

json = json_load_file("/path/to/file.json", 0, &error);
if(!json) {
/* the error variable contains error information */
}
...
}

40

Jansson: Importar

json_t *json_loadb(const char *buffer, size_t
buflen, size_t flags, json_error_t *error)

– Crea el árbol a partir del buffer el cuál tiene la

información en formato JSON

– Cuyo tamaño es buflen
– Devuelve el array o el objeto que contiene la
información parseada. En caso de error, se
almacenará la causa en la estructura error.

41

Jansson: Importar

json_t *json_loadf(FILE *input, size_t flags,
json_error_t *error)

– Crear el árbol a partir de un stream de entrada en

formato JSON

– Devuelve el array o el objeto que contiene la
información parseada. En caso de error, se
almacenará la causa en la estructura error.

42

Jansson: Importar

● Las funciones anteriores pueden utilizar flags

para configurar la creación de nuestros árboles,
como por ejemplo:
– JSON_REJECT_DUPLICATES: Emite un error si

existen clave duplicadas en la entrada que vamos a
importar

– JSON_DECODE_ANY: Por defecto, nuestras

funciones de importación esperan un objeto o un
array. Con este flag activo, parseará todo elemento.

43

Jansson: Importar

– JSON_DECODE_INT_AS_REAL: Si este flag esta
activo, Jansson importará todos los valores como
tipos reales. En caso contrario serán importados
como enteros

44

Jansson: Exportar

● char *json_dumps(const json_t *root, size_t

flags)
Devuelve la representación JSON del arbol
que pasamos como “root”. La devolución debe
ser liberada usando free.

45

Jansson: Exportar

● int json_dumpf(const json_t *root, FILE
  • Links de descarga
http://lwp-l.com/pdf19243

Comentarios de: Programación en C moderno (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad