¿Cuál es la diferencia entre analizar un archivo CSV y JSON? ¿Qué algoritmos comunes usarías en ambos?

La respuesta de Glenn Anderson cubre bastante bien las principales diferencias. Ambas son formas de datos estructurados. La principal diferencia es que CSV es plano, mientras que JSON es jerárquico. Como dijo, un CSV contiene muchos registros idénticos, mientras que un archivo JSON puede contener datos estructurados muy arbitrarios.

En cuanto al análisis, Glenn Anderson no dijo mucho, así que eso es lo que responderé.

Análisis CSV

Debido a la naturaleza simple de un archivo CSV, es mucho más fácil de analizar, de hecho, en el caso general, una división simple en coma dividirá un registro en columnas. El CSV es esencialmente una matriz de matrices o una matriz de hashs dependiendo de cómo se mire. Cada línea es una fila en la matriz primaria independientemente. Cada coma en una fila designa el final de un elemento en la matriz interna. Alternativamente, usando una fila de encabezado, a cada columna se le puede asignar un nombre y las columnas integradas en un hash para que tenga la matriz de hashs. Si bien la división simple funcionará para el caso simple, la verdad es que el análisis es un poco más complicado, ya que algunas columnas pueden contener una coma interna y, como tal, deben citarse. Esta cita introduce la necesidad de citar las citas y así sucesivamente, por lo que el uso de un analizador CSV es generalmente una buena idea, aunque no es difícil de construir desde cero.

En general, el análisis CSV es solo un algoritmo simple de recorrer las líneas del archivo.

JSON Parsing

JSON

La estructura JSON es mucho más flexible que CSV y, por lo tanto, mucho más complicada de analizar. Cada elemento puede contener subelementos infinitamente. JSON define varios tipos diferentes también. Los valores pueden ser cadena, número, verdadero, falso, nulo, objeto o matriz. Las matrices contienen 0 o más elementos de valor. Los objetos contienen pares de valores clave, donde la clave es una cadena y el valor como se definió anteriormente.

Debido a la naturaleza cíclica de la estructura de un documento JSON, es necesario mantener el estado mientras analiza. Debe saber dónde se encuentra en la jerarquía para adjuntar el siguiente valor en la ubicación adecuada. La naturaleza cíclica se presta bien para usar funciones recursivas. La pila mantiene su estado y cada iteración solo mira el nivel actual dentro de la jerarquía general. Si bien los documentos jerárquicos se pueden analizar sin recurrencia, el código recursivo es mucho más fácil de leer en este caso. Sin recurrencia, la cantidad de estado que se requiere se vuelve muy difícil de mantener. Sin recurrencia, necesitará usar algún tipo de cola / lista para mantener su orden en el documento mayor.

A menos que su tarea sea escribir un analizador JSON, siempre debe usar una biblioteca para analizar JSON.

Ambos son protocolos basados ​​en texto diseñados para transferir datos. Pero sus formatos son muy diferentes. Un archivo CSV (variables separadas por comas) es literalmente una tabla, como una hoja de cálculo. Cada fila representa un registro, y cada columna representa un campo específico dentro de ese registro. El formato del archivo es que cada campo está separado por una coma. Puede usar comillas alrededor de los campos que contienen una coma.

JSON (JavaScript Object Notation) formatea los datos exactamente como una variable de JavaScript. Hay algunos estándares documentados que hacen que esto sea más un subconjunto de lo que puede hacer en JS, pero es JavaScript válido. JSON son datos no estructurados, a diferencia de un archivo CSV que tiene que hacer que cada fila contenga el mismo tipo de datos. Por lo tanto, es más flexible. Encontrará que muchas API AJAX y REST usan JSON como su protocolo nativo.

More Interesting

¿Por qué es necesario un relleno de palabra no utilizado al comienzo del espacio de almacenamiento dinámico asignado?

¿Cómo podría un algoritmo que crea un cambio en el comportamiento del consumidor crear valor?

¿Qué algoritmo usa la radio de Spotify para elegir las canciones?

¿Es suficiente el conocimiento del tamiz de Eratóstenes y la factorización prima al preparar los concursos de programación?

¿Se utiliza el algoritmo VWAP (precio promedio ponderado por volumen) en HFT?

¿Se puede programar un algoritmo complejo de una manera simple? Suponga que no se necesitan optimizaciones.

¿Es mejor representar aristas en un gráfico que sale de un vértice como miembros de una matriz dinámica o una lista vinculada?

Dados n puntos en un plano 2D, ¿cómo encontrarías el número máximo de puntos que se encuentran en la misma línea recta? Proporcione un algoritmo para resolver este problema.

¿Qué es el WordNet? ¿Cuál es la relación entre WordNet y el algoritmo Leacock & Chodorow?

¿Qué algoritmo se puede usar para encontrar la clave para el cifrado y la clave de entrada en el formulario?

Además de la complejidad de tiempo y espacio, ¿qué otras métricas de rendimiento deben tenerse en cuenta al medir el rendimiento de un algoritmo?

¿En qué paso de la prueba del algoritmo de Dijkstra utilizamos el hecho crucial de que los bordes no son negativos?

Cómo encontrar el número de subárboles izquierdo y derecho de un árbol binario

¿Qué debo aprender después de conocer las estructuras de datos en la programación?

¿Es este algoritmo para la predicción de acciones bueno o lógico? ¿Es original?