Introducción a los formatos CSV y JSON es un formato de intercambio de datos común que se usa ampliamente para representar conjuntos de registros con una lista de campos idéntica. El formato de valores separados por comas (CSV) en la actualidad se convirtió de facto en el estándar de formato de intercambio de datos, reemplazando a XML, que era una gran palabra de moda a principios de la década de 2000. No solo es autodescriptivo, sino también legible por humanos. La notación de objetos de JavaScript (JSON) Veamos ejemplos de ambos formatos. Aquí hay una lista de familias representadas como datos CSV: id,padre,madre,hijos1,Mark,Charlotte,12,John,Ann,33,Bob,Monika,2 CSV parece mucho más simple que el análogo de matriz que se muestra a continuación: JSON [{"id":1,"padre":"Mark","madre":"Charlotte","hijos":1},{"id":2,"padre":"Juan","madre": "Ann","hijos":3},{"id":3,"padre":"Bob","madre":"Monika","hijos":2},] Pero CSV se limita a almacenar datos bidimensionales sin tipo. No hay forma de almacenar estructuras anidadas o tipos de valores como nombres de niños en CSV simple. [{"id":1,"padre":"Mark","madre":"Charlotte","hijos":["Tom"]},{"id":2,"padre":"Juan", "madre":"Ann","hijos":["Jessika","Antony","Jack"]},{"id":3,"padre":"Bob","madre":"Monika", "niños":["Jerry","Karol"]},] Sin embargo, representar estructuras anidadas en archivos JSON es fácil. ¿Por qué no simplemente rodear todos los datos con una matriz JSON normal para que el archivo en sí sea json válido? Para insertar o leer un registro de una matriz JSON, debe analizar todo el archivo, lo que está lejos de ser ideal. Dado que cada entrada en JSON Lines es un JSON válido, se puede analizar/desmontar como un documento JSON independiente. Por ejemplo, puede buscar dentro de él, dividir un archivo de 10 gb en archivos más pequeños sin analizar todo. 1. No es necesario leer todo el archivo en la memoria antes de analizarlo. 2. Puede agregar fácilmente más líneas al archivo simplemente agregando al archivo. Si todo el archivo fuera una matriz JSON, tendría que analizarlo, agregar la nueva línea y luego volver a convertirlo a JSON. Por lo tanto, no es práctico mantener varios gigabytes como una sola matriz JSON. Teniendo en cuenta que los usuarios del kit de Dataflow necesitarían almacenar y analizar grandes volúmenes de datos, hemos implementado . la exportación al formato JSONL son tres términos que expresan los mismos formatos destinados principalmente a la transmisión JSON. Líneas JSON (jsonl), JSON delimitado por nueva línea (ndjson), JSON delimitado por línea (ldjson) Veamos qué es y cómo se compara con otros formatos de transmisión JSON. JSON Lines Líneas JSON frente a JSON Exactamente la misma lista de familias expresada en formato se ve así: JSON Lines {"id":1,"padre":"Mark","madre":"Charlotte","hijos":["Tom"]}{"id":2,"padre":"John","madre ":"Ann","hijos":["Jessika","Antony","Jack"]}{"id":3,"padre":"Bob","madre":"Monika","hijos" :["Jerry","Karol"]} consisten esencialmente en varias líneas donde cada línea individual es un objeto JSON válido, separadas por el carácter de nueva línea . Las líneas JSON `\n` No requiere analizadores personalizados. Simplemente lea una línea, analice como JSON, lea una línea, analice como JSON... y así sucesivamente. En realidad ya es común en la industria usar muy jsonl Haga clic en el enlace a continuación para encontrar más detalles sobre la especificación de líneas JSON. _Esta página describe el formato de texto de líneas JSON, también llamado JSON delimitado por saltos de línea. JSON Lines es un formato conveniente..._jsonlines.org Líneas JSON Líneas JSON frente a secuencias de texto JSON Comparemos el y el tipo de medio asociado "application/json-seq" con . Consiste en cualquier cantidad de textos JSON, todos codificados en UTF-8, cada uno con el prefijo de un separador de registro ASCII (0x1E) y cada uno termina con un carácter de avance de línea ASCII (0x0A). formato de secuencia de texto JSON NDJSON Veamos la lista de personas mencionadas anteriormente expresadas como archivo de secuencia JSON: <RS>{"id":1,"padre":"Mark","madre":"Charlotte","hijos":["Tom"]}<LF><RS>{"id":2," padre":"Juan","madre":"Ann","hijos":["Jessika","Antony","Jack"]}<LF><RS>{"id":3,"padre": "Bob","madre":"Monika","hijos":["Jerry","Karol"]}<LF> aquí hay un marcador de posición para el separador de registro ASCII no imprimible (0x1E). representa el carácter de salto de línea. <RS> <LF> El formato se ve casi idéntico a JSON Lines excepto por este símbolo especial al principio de cada registro. Como estos dos formatos son tan similares, es posible que se pregunte por qué existen ambos. El formato de se usa para un contexto de transmisión. Entonces, este formato no define la extensión de archivo correspondiente. Aunque la especificación de formato de secuencias de texto JSON registra el nuevo tipo de medio MIME Es propenso a errores almacenar y editar este formato en un editor de texto, ya que el carácter no imprimible (0x1E) puede estar distorsionado. secuencias de texto JSON application/json-seq. Puede considerar usar líneas JSON como una alternativa consistente. Líneas JSON frente a JSON concatenado Otra alternativa a JSON Lines es En este formato, cada texto JSON no está separado en absoluto. JSON concatenado. Aquí está la representación JSON concatenada de un ejemplo anterior: {"id":1,"padre":"Mark","madre":"Charlotte","hijos":["Tom"]}{"id":2,"padre":"John","madre ":"Ann","hijos":["Jessika","Antony","Jack"]}{"id":3,"padre":"Bob","madre":"Monika","hijos" :["Jerry","Karol"]} JSON concatenado no es un formato nuevo, es simplemente un nombre para transmitir varios objetos JSON sin delimitadores. Si bien generar JSON no es una tarea tan compleja, analizar este formato en realidad requiere un esfuerzo significativo. De hecho, debe implementar un analizador contextual que detecte registros individuales y los separe correctamente. Bonitos formatos JSON impresos Si tiene estructuras anidadas grandes, no se recomienda leer directamente el texto de las líneas JSON. Use la herramienta para facilitar la visualización de estructuras grandes: jq grep . families.jsonl | jq Como resultado, verá un archivo JSON bastante impreso: {"id": 1,"padre": "Mark","madre": "Charlotte","hijos": ["Tom"]}{"id": 2,"padre": "Juan","madre ": "Ann","hijos": ["Jessika","Antony","Jack"]}{"id": 3,"padre": "Bob","madre": "Monika","hijos" : ["Jerry","Karol"]} Conclusión El archivo JSON Lines completo como un todo técnicamente ya no es JSON válido, porque contiene varios textos JSON. El hecho de que cada nueva línea signifique una entrada separada hace que el archivo con formato JSON Lines se pueda transmitir. Puede leer tantas líneas como sea necesario para obtener la misma cantidad de registros. _Plataforma de código abierto de raspado web escrita en Go_dataflowkit.com Convierta los sitios web en datos estructurados/Kit de flujo de datos