sintáxis\documentclass[a4paper]{article}
\usepackage{fullpage}
\usepackage[spanish]{babel}
%\usepackage[latin1]{inputenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{colortbl}
\usepackage {html}
\usepackage {hthtml}


\begin{document}
\begin{large}
\noindent
{\bf Prácticas con json }  \\
Servicios Telemáticos 2015-2016\\
Grado en Ingeniería Telemática  \\
Universidad Rey Juan Carlos\\ 
\hturl{http://gsyc.urjc.es}
\hrule
\end{large}

\vspace{0.5cm}


%\subsection*{Cambios en el documento}
%\begin{itemize}
%\item
%\end{itemize}


\section*{Observaciones}
\begin{itemize}
\item
Crea el fichero  \verb|~/st/practica04.txt|,
que contendrá la memoria que escribas sobre  este segundo bloque de
prácticas. 


Cuando una práctica consista solamente en preparar un script, no es necesario que
escribas nada en la memoria. Cuando la práctica consista en revisar ficheros o darles formato,
sí.


\item
%En la primera línea, indica tu nombre y login. 
%
%En la memoria no es necesario que vuelvas a escribir el enunciado. 
%
%Cuando la ejecución de un apartado de una práctica muestre algo en stdout, es necesario que copies 
%esta salida y la pegues en la memoria.
%%
%%Si bien  es probable que este fichero lo dejes vacío
%%(puesto que cuando la práctica consista en un script,
%%en la memoria no es necesario escribir nada, a menos que tengas
%%algún motivo para indicar algo)
%
Crea el directorio \verb|~/st/practica04| donde escribirás el resto de ficheros de esta práctica. 
Recuerda que la recogida de las prácticas 
se hará automáticamente el dia del examen, así que es muy importante que respetes al pie de la letra todos los
nombres de ficheros y directorios que indiquen todos los enunciados. 
%\item
%Haz que este directorio sea un repositorio git y vete metiendo en él todos los scripts, según los vayas escribiendo.

\end{itemize}

\section*{Práctica 4.1 jsoncheck, jsonpp}
En esta práctica probarás jsoncheck, un pequeño programa que comprueba que un fichero contiene un
valor json válido, y jsonpp, que hace \emph{pretty printing} de un fichero con valores json.
Ambor trabajan a partir de un fichero leído por stdin

    \begin{enumerate}
    \item
Descarga 
\htlink{jsoncheck}{http://gsyc.urjc.es/~mortuno/st/jsoncheck}
y
\htlink{jsonpp}{http://gsyc.urjc.es/~mortuno/st/jsonpp}

y guárdalo en
\verb|~/bin|

    \item
Escribe un objeto json de tipo \emph{holamundo} con un par de pares valor-clave y úsalo
para probar jsoncheck y jsonpp

Copia y pega el resultado en el fichero con la memoria de la práctica
%Crea el fichero  \verb|~/st/practica04.txt|,
    \end{enumerate}

\section*{Práctica 4.2 coches.json }

Escribe un fichero json
\verb|~/st/practica04/coches.json|
con la misma información que tu fichero
\verb|~/st/practica02/coches.xml|

Compruébalo con jsoncheck, dale formato con jsonpp

Copia y pega el resultado en el fichero con la memoria de la práctica

\section*{Práctica 4.3 discoteca.json }

Escribe un fichero json
\verb|~/st/practica04/discoteca.json|
con la misma información que tu fichero
\verb|~/st/practica02/discoteca.xml|

Compruébalo con jsoncheck, dale formato con jsonpp

Copia y pega el resultado en el fichero con la memoria de la práctica

\section*{Práctica 4.4 Fechas y horas en json }

Modifica el script

\verb|~/st/practica03/fechas.py|

para que en caso de recibir la opción 
\verb|-j --json| muestre la salida en formato json. Deberá generar una lista de objetos. La clave de cada objeto 
será el número de línea (1,2,3...) y el valor será  o bien una cadena con la fecha y la hora
o bien el timestamp como número (no como cadena). 

Observa que:

    \begin{itemize}
    \item
Solo cambia el formato de la salida, la información contenida y el resto del comportamiento del script
será idéntico al comportamiento en la práctica 3

    \item
Aunque esta es la práctica 4, estás modificando un fichero del directorio
\verb|~/st/practica03|
    \end{itemize}

\section*{Práctica 4.5 papeleria.py}

Escribe el script
\verb|~/st/practica04/papeleria.py|  (sin tilde en la i)
que aceptará por entrada estándar un fichero en formato json según la siguiente especificación

    \begin{itemize}
    \item
El fichero contendrá un array de valores

    \item
Cada valor será un objeto

    \item
Cada objeto tendrá tres claves:
 \emph{ref}, cuyo valor será un número,
 \emph{descripcion} (sin tilde en la 'o'), cuyo valor será una cadena y
 \emph{precio}, cuyo valor será un número

    \item
El script deberá mostrar en la salida estándar la misma información, en formato tabular
    \item
    \end{itemize}

Ejemplo de entrada:
  \begin{footnotesize}
  \begin{verbatim}
[{"descripcion": "Caja 12 l\u00e1pices", "precio": 7.54, "ref": 869468}, {"descripcion": "Papelera negra", "precio": 6.1, "ref": 968726}, {"descripcion": "Paquete 500 hojas A4", "precio": 5.4, "ref": 518196}]
  \end{verbatim}
  \end{footnotesize}

Descarga 
\htlink{este ejemplo}{http://gsyc.urjc.es/~mortuno/st/libreria.json}
para probar tu práctica 

La salida deberá tener un aspecto similar a este:
  \begin{footnotesize}
  \begin{verbatim}
Ref.     Precio   Descripción
-------------------------------------------------------------------
869468   7.54     Caja 12 lápices
968726   6.10     Papelera negra
518196   5.40     Paquete 500 hojas A4
  \end{verbatim}
  \end{footnotesize}

\section*{Práctica 4.6 inflacion.py}
Escribe el script
\verb|~/st/practica04/inflacion.py|
que

    \begin{itemize}
    \item
Aceptará desde stdin un fichero json con el formato descrito en el apartado anterior

    \item
Tendrá definida una constante llamada INFLACION. Será un objeto (una variable) que aparecerá 
al principio del código, inmediatamente después de las sentencias import

\item
Mostrará en stdout el mismo fichero que a la entrada, con el mismo formato, pero con los
precios multiplicados por 1+(INFLACION*0.01)


Ejemplo: si INFLACION vale 3 y el precio era 7.54, el nuevo precio será 7.7662
    \end{itemize}

\section*{Práctica 4.7 papelería en xml}
Escribe un script con el nombre
\verb|~/st/practica04/papeleria2xml.py|  (sin tilde en la i)
que reciba por stdin un fichero en json como el especificado en la práctica 4.5 y
escriba en stdout un fichero con la misma información en xml. Tienes libertad
para definir el formato de este xml, con tal de que contenga la misma información
y que sea sintácticamente correcto (compruébalo con xmlcheck)

\section*{Práctica 4.8 Fechas en xml}

Una vez que tu script 
\verb|~/st/practica03/fechas.py|
funcione correctamente como indica la práctica 4.4, hazle una copia con nombre
\verb|~/st/practica03/fechas0.py|

Mueve
\verb|~/st/practica03/fechas.py|
a
\verb|~/st/practica04/fechas.py|
y hazle las siguientes modificaciones

(Observa que antes estaba en el directorio practica03 y ahora en practica04)

\begin{enumerate}
\item
Si el script recibe la opción \verb|-a --ascii|, mostrará la salida
en texto plano, igual que 
\verb|~/st/practica03/fechas0.py|

\item
Si el script recibe la opción \verb|-j --json|, muestra la salida
en json, como que hasta ahora


\item
Si el script no recibe la opción \verb|-a --ascii| ni la opción
\verb|-j --json|, mostrará la salida en formato XML

\item
El elemento raiz se llamará 
\emph{instants}
y cada uno de sus elementos,
\emph{instant}

\item
Si la fecha corresponde a una ciudad, el elemento raíz tendrá un atributo
llamado
\emph{city}
cuyo valor será esa ciudad


Si la fecha es un timestamp, el elemento raíz tendrá un atributo llamado
\emph{city}
cuyo valor será la cadena de texto \emph{timestamp}


\item
Cada uno de los elementos tendrá un atributo llamado
\emph{date}
con la fecha, en el mismo formato especificado en la práctica 3.1
así como un atributo llamado
\emph{ordinal}
con el número de línea


\end{enumerate}

Ejemplo de salida para Madrid:
  \begin{footnotesize}
  \begin{verbatim}
<instants city="Madrid">
    <instant date="2004-10-18 23:06:49+02:00" ordinal="1" />
    <instant date="2015-08-21 05:32:06+02:00" ordinal="2" />
    <instant date="2005-07-26 08:12:25+02:00" ordinal="3" />
[...]
    <instant date="2001-02-27 05:59:39+01:00" ordinal="40" />
</instants>
  \end{verbatim}
  \end{footnotesize}


Ejemplo de salida para timestamp


  \begin{footnotesize}
  \begin{verbatim}
<instants city="timestamp">
    <instant date="1098133609" ordinal="1" />
    <instant date="1440127926" ordinal="2" />
    <instant date="1122358345" ordinal="3" />
[...]
    <instant date="983249979" ordinal="40" />
</instants>
  \end{verbatim}
  \end{footnotesize}



    \begin{itemize}
    \item
La salida de tu script no es necesario que incorpore pretty printing, pero usa xmlpp
y xmlcheck
para comprobar que es correcta

    \item
Estos ejemplos ilustran el formato de la salida, como podrás observar estas fechas 
no se corresponden a las del ejemplo mostrado en 3.1
    \end{itemize}



\end{document}
