Analizando JSON usando C [closed]

6 minutos de lectura

avatar de usuario
repartidor

Estoy tratando de encontrar una buena manera de analizar JSON en C. Realmente no necesito una gran biblioteca ni nada, preferiría tener algo pequeño y liviano con un mínimo de características, pero buena documentación.

¿Alguien tiene algo que me pueda indicar?

  • ¿Estás usando una distribución de Linux?

    – Nick

    13 de julio de 2011 a las 4:06

  • json-glib

    – Nick

    13 de julio de 2011 a las 4:07

  • ¿Funcionaría la biblioteca de Objective-C? Uso TouchJson en mi mac cuando en obj-c es muy fácil de usar y pequeño.

    – Nick

    13 de julio de 2011 a las 4:12

  • Cuando dices “mínimo”, ¿qué tan mínimo puedes llegar realmente? Algunos manejarán varias codificaciones Unicode, algunos solo UTF-8, y algunos solo prestarán atención a los “caracteres de formato” ASCII, como {, [, ], }, ,, "y barra invertida. Pueden o no dejar que usted cambie las secuencias de escape de Unicode, pueden dejar que usted verifique si los números están dentro del rango permitido de Unicode, etc. Luego está la gran diferencia entre analizar JSON arbitrario en árboles versus JSON conocido en C estructuras

    – pista hippie

    9 de marzo de 2013 a las 11:13


  • Relacionado: Analizar JSON en ANSI C [closed]

    – pista hippie

    18 de marzo de 2013 a las 2:31


avatar de usuario
Merlyn Morgan Graham

Para empezar, Json no es un lenguaje enorme, por lo que es probable que las bibliotecas sean pequeñas (más que las bibliotecas Xml, al menos).

Hay un montón de Bibliotecas C vinculadas en Json.org. Tal vez uno de ellos funcione bien para usted.

  • Si gracias por la respuesta! Revisé un montón de ellos y estaban bastante mal documentados/mantenidos. Pensé que probaría aquí antes de sufrir integrando uno…. 🙂

    – dshipper

    13 de julio de 2011 a las 4:11

  • @dshipper: sourceforge.net/proyectos/cjson parece algo prometedor, dados sus requisitos. Personalmente, no he usado ninguna de estas bibliotecas, por lo que no puedo recomendar ninguna. Las sugerencias para una sola biblioteca solo son una opinión, de todos modos, y no una respuesta definitiva 🙂

    – Merlyn Morgan-Graham

    13 de julio de 2011 a las 4:13


  • @dshipper: He tenido buenas experiencias con jansson, que es liviano y está bien documentado. digip.org/jansson/doc/2.1

    -Dietrich Epp

    13 de julio de 2011 a las 4:21

  • @Dietrich, dshipper: Acabo de mirar a Jansson. Estoy de acuerdo en que está bien documentado y es bastante pequeño, y parece que tiene un buen conjunto de pruebas. Probablemente también se ajuste a sus requisitos. Pero probablemente haya varias bibliotecas que funcionen. Le recomiendo que abstraiga sus dependencias de Json lo mejor que pueda, pruebe algunas bibliotecas y vea cuál le causa menos dolor 🙂

    – Merlyn Morgan-Graham

    13 de julio de 2011 a las 4:53


  • Entonces, @dshipper, ¿buscó sourceforge.net/projects/cjson o qué?

    – Mawg dice que reincorpore a Monica

    22 de abril de 2015 a las 14:54

avatar de usuario
NateS

cJSON tiene una API decente y es pequeño (2 archivos, ~700 líneas). Muchos de los otros analizadores JSON que miré primero eran enormes… Solo quiero analizar algunos JSON.

Editar: hemos hecho algunas mejoras a cJSON a lo largo de los años.

avatar de usuario
Yaroslav Stavnichiy

NXJSON es un analizador JSON con todas las funciones pero muy pequeño (~ 400 líneas de código), que tiene una API fácil de usar:

const nx_json* json=nx_json_parse_utf8(code);
printf("hello=%s\n", nx_json_get(json, "hello")->text_value);
const nx_json* arr=nx_json_get(json, "my-array");
int i;
for (i=0; i<arr->length; i++) {
  const nx_json* item=nx_json_item(arr, i);
  printf("arr[%d]=(%d) %ld\n", i, (int)item->type, item->int_value);
}
nx_json_free(json);

  • Como parece ser el desarrollador de NXJSON, tal vez podría comentar cómo se compara con cJSON u otras opciones.

    – Mate

    13 de enero de 2014 a las 9:35

  • Cosas simples hechas de manera simple: esta es la principal diferencia de NXJSON con la mayoría de los otros analizadores. cJSON también es simple, pero más allá del analizador json, también incluye el constructor json y el serializador. cJSON necesita más memoria ya que duplica todas las cadenas, mientras que NXJSON realiza todas las manipulaciones en el lugar y destruye el contenido original. Dependiendo de su tarea, estas diferencias pueden considerarse ventajas o desventajas. NXJSON también maneja comentarios, lo cual es bueno para analizar archivos de configuración.

    – Yaroslav Stavnichiy

    14 de enero de 2014 a las 11:36

avatar de usuario
prabhpreet

Jsmn es bastante minimalista y solo tiene dos funciones para trabajar.

https://github.com/zserge/jsmn

avatar de usuario
TantrajJa

Puedes echar un vistazo a Jansson

El sitio web establece lo siguiente: Jansson es una biblioteca C para codificar, decodificar y manipular datos JSON. Cuenta con:

  • API y modelo de datos simples e intuitivos
  • Puede codificar y decodificar desde JSON
  • Documentación completa
  • Sin dependencias de otras bibliotecas
  • Compatibilidad completa con Unicode (UTF-8)
  • Amplio conjunto de pruebas

  • Enlace directo de Github: github.com/akheron/jansson

    – Ray Hulha

    23 de agosto de 2016 a las 13:28

  • Tuve la tentación de usar jsmn por su velocidad[1], pero no admite la codificación. Además, Jansson es realmente fácil de usar. — [1] traducir.google.it/…

    – Marco Sila

    25 de agosto de 2016 a las 9:59


  • OjC es rápido y admite codificación. github.com/ohler55/ojc

    -Peter Ohler

    16 dic 2016 a las 21:54

  • Jansson es mi opción para analizar JSON en C

    – Kenneth Wilke

    22 de septiembre de 2017 a las 2:25

avatar de usuario
Kurtis

solía JSON-C para un proyecto de trabajo y lo recomendaría. Ligero y se lanza con licencia abierta.

La documentación está incluida en la distribución. básicamente tienes *_add funciones para crear objetos JSON, equivalente *_put funciones para liberar su memoria y funciones de utilidad que convierten tipos y objetos de salida en representación de cadena.

La licencia permite la inclusión con su proyecto. Lo usamos de esta manera, compilando JSON-C como una biblioteca estática que está vinculada con la compilación principal. De esa manera, no tenemos que preocuparnos por las dependencias (aparte de instalar Xcode).

JSON-C también se creó para nosotros bajo OS X (x86 Intel) y Linux (x86 Intel) sin incidentes. Si su proyecto necesita ser portátil, este es un buen comienzo.

  • Enlace directo de Github: github.com/akheron/jansson

    – Ray Hulha

    23 de agosto de 2016 a las 13:28

  • Tuve la tentación de usar jsmn por su velocidad[1], pero no admite la codificación. Además, Jansson es realmente fácil de usar. — [1] traducir.google.it/…

    – Marco Sila

    25 de agosto de 2016 a las 9:59


  • OjC es rápido y admite codificación. github.com/ohler55/ojc

    -Peter Ohler

    16 dic 2016 a las 21:54

  • Jansson es mi opción para analizar JSON en C

    – Kenneth Wilke

    22 de septiembre de 2017 a las 2:25

avatar de usuario
R.. GitHub DEJAR DE AYUDAR A ICE

¿Necesita analizar estructuras JSON arbitrarias o solo datos específicos de su aplicación? Si es lo último, puede hacerlo mucho más ligero y eficiente al no tener que generar ninguna tabla hash/estructura de mapa que asigne claves JSON a valores; en su lugar, puede simplemente almacenar los datos directamente en campos de estructura o lo que sea.

  • Este es un punto muy importante cuando se usa JSON con lenguajes no dinámicos como C. Pero no es una respuesta, por lo que realmente debería ser un comentario a la pregunta del OP.

    – pista hippie

    9 de marzo de 2013 a las 11:22

  • +1 para el pensamiento creativo! ¿Cómo funcionaría eso? ¿No podría esto todavía hacer uso de una biblioteca particularmente liviana? Analizar en campos de estructura todavía suena como un poco de trabajo.

    – CL22

    4 oct 2016 a las 17:36


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad