ejemplos - mostrar datos json javascript
¿Cómo describir los datos JSON en una especificación? (4)
¿Cuál es la mejor manera de describir los datos JSON en una especificación?
En el pasado, he usado ejemplos con descripciones ''verbales'', pero parece impreciso.
Parece haber un estándar de esquema JSON naciente, pero no parece un proyecto muy activo. ¿Alguna otra manera?
( Actualización ) Después de pensar sobre esto durante varios días, me gusta la sugerencia de bromear sobre el uso de una convención de conversión. Dado que los documentos JSON en este caso, nuestra salida de los servicios web .NET voy a simplemente documentar el esquema con la sintaxis de la clase C #. Esto puede no ser totalmente riguroso, pero todos los involucrados lo entenderán y, junto con los ejemplos, transmitirán el mensaje lo más rápido posible.
¿Qué hay de usar algún tipo de BNF extendido?
PERSON <- { "firstname": FIRSTNAMES, "lastname": LASTNAME, "age": AGE, "version": VERSION, "parents" <- PARENTS }
FIRSTNAMES <- [ FIRSTNAME+ ]
FIRSTNAME <- STRING
LASTNAME <- STRING
PARENTS <- [ PERSON{0,2} ]
AGE <- INTEGER
VERSION <- 1 | 2
Tendría que definir el significado de las descripciones de tipo atómico como INTEGER y STRING en algún lugar. Si desea agregar claves no codificadas para diccionarios, debe definir eso de la siguiente manera:
BREADLOOKUP <- { (TYPE : HOWMANY)+ }
TYPE <- "white" | "dark" | "french" | "croissant"
HOWMANY <- POSITIVE-INTEGER
Esto permitiría cosas como
{ "white": 5,
"french": 2
}
Como las expresiones regulares y BNF son bastante conocidas, esta podría ser una forma fácil de hacerlo. ?
, +
, *
, {n}
, {min,max}
serían formas fáciles de especificar una cantidad de elementos (tomados de expresiones regulares) y el resto es casi puro BNF.
Si lo hiciste con la rigurosidad suficiente, incluso podría ser analizable para un validador.
Podría combinar un Esquema XML de W3C, o un esquema menos desagradable como RelaxNG, con las convenciones de conversión.
Recomendaría mi biblioteca de JavaScript js-schema . La principal motivación detrás de esto fue lo mismo que describes en la pregunta. Es una notación simple y fácil de entender para describir esquemas JSON (o especificación, si lo desea).
Un esquema de ejemplo descrito en el Esquema JSON:
{
"type":"object",
"properties":{
"id":{
"type":"number",
"required":true
},
"name":{
"type":"string",
"required":true
},
"price":{
"type": "number",
"minimum":0,
"required":true
},
"tags":{
"type":"array",
"items":{
"type":"string"
}
}
}
}
y la misma descripción de esquema con js-schema:
{
"id" : Number,
"name" : String,
"price" : Number.min(0),
"?tags" : Array.of(String)
}
La biblioteca puede validar objetos contra esquemas, generar objetos aleatorios que se ajusten a un esquema dado y serializar / deserializar a / desde el esquema JSON.
Sé que esta es una pregunta más antigua, pero podría ser útil para otra persona: cuando busqué métodos para describir datos JSON, tropecé con Orderly . Aquí está el derecho abstracto de la página principal:
Ordenado es un formato de texto para describir JSON. Orderly se puede compilar en JSONSchema. Está diseñado para ser fácil de leer y escribir.
Puedo estar de acuerdo con eso, pero hasta ahora solo lo he probado con estructuras relativamente simples.