Comunidad Gambas-es

Versión completa: Alguien tiene hecho un "Settings" pero con JSONCollection?
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola amigos.
¿Alguien tiene hecho un "Settings" pero con JSONCollection?
Es que necesito mantener las claves con valores vacíos y Settings (que yo sepa) no lo hace.
Saludos.
Saludos Tincho,

No sé si le servirá esto que subo. Es una prueba de concepto, yo uso un "Settings" en XML y estuve jugando con uno en JSON, está incompleto, solo realiza la lectura del fichero. A futuro quiero retomarlo, me pareció más sencillo que XML. He "limpiado" un poco el código para hacerlo más entendible.

La idea es tener dos ficheros de configuración, uno local y otro global. Permite parámetros de aplicación generales y particulares.
Lo que hay en el programa es:
  • Una clase PARAMETRO, básicamente contiene datos del parámetro: Scope (ámbito global o local), Sección (agrupo los parámetros), nombre, clave (código único de 4 dígitos), tipo (string - integer - ....) y el valor.
  • Una clase CONFIG, es una colección de parámetros y su gestión. Es quien hace la lectura de JSON. La Key del objeto "Collection" es la clave del parámetro.
  • Un módulo MODGEN. Es el arranque del programa, contiene la definición de constantes para "mapear" los códigos numéricos y hace una carga por defecto de la configuración.
  • Un formulario para visualizar parámetros y llamar a los procesos de carga. Estos procesos se llaman desde el evento "click" del combobox.
Además incluye los procesos de carga XML y los ficheros de configuración XML.

El formulario:

[Imagen: Z1RY9Ls.png]

El fichero JSON utilizado:
Código:
{"Global":
    {"ConfigJSON":[
        {"Database":[
            {"key":1000, "name": "DBType", "type": "string", "value": "sqlite3"},
            {"key":1001, "name": "DBCharset", "type": "string", "value": "UTF8"},
            {"key":1002, "name": "DBHostName", "type": "string", "value": "PruebaLocal"},
            {"key":1003, "name": "DBPort", "type": "integer", "value": "8000"},
            {"key":1004, "name": "DBDatabase", "type": "string", "value": "ConfigJSON.sqlite"},
            {"key":1005, "name": "DBUser", "type": "string", "value": null},
            {"key":1006, "name": "DBPassword", "type": "string", "value": null}
        ]},
        {"Mask":[
            {"key":1100, "name": "MaskDate", "type": "string", "value": "dd/mm/yyyy"},
            {"key":1101, "name": "MaskInteger", "type": "string", "value": "###0"},
            {"key":1102, "name": "MaskFloat", "type": "string", "value": "#,##0.00"},
            {"key":1103, "name": "MaskTime", "type": "string", "value": "hh:mm"},
            {"key":1104, "name": "ComaDecimal", "type": "string", "value": ","},
            {"key":1105, "name": "PuntoMiles", "type": "string", "value": "."},
            {"key":1106, "name": "Decimales", "type": "integer", "value": "-2"},
            {"key":1107, "name": "MaskMoney", "type": "string", "value": "$#,##0.00"}
        ]},
        {"Company":[
            {"key":9900, "name": "RazonSocial", "type": "string", "value": "Prueba S.L."},
            {"key":9901, "name": "CIF", "type": "string", "value": "B00000000"},
            {"key":9902, "name": "Direccion", "type": "string", "value": "Avenida de JSON 5"},
            {"key":9903, "name": "Poblacion", "type": "string", "value": "JSON de Abajo"},
            {"key":9904, "name": "CodigoPostal", "type": "string", "value": "99000"},
            {"key":9905, "name": "Provincia", "type": "string", "value": "Republica de JSON"},
            {"key":9906, "name": "Telefono", "type": "integer", "value": "999 999 999"},
            {"key":9907, "name": "Movil", "type": "string", "value": null},
            {"key":9950, "name": "Banco", "type": "string", "value": "El móvil es NULL"},
            {"key":9951, "name": "Oficina", "type": "string", "value": null},
            {"key":9952, "name": "Cuenta", "type": "string", "value": null},
            {"key":9953, "name": "SWIF", "type": "string", "value": null}
        ]}            
    ]}
}

Espero que le sirva.
Un saludo, Harpo.


[attachment=89]
Gracias Harpo. Lo estudiaré.
Hola Harpo, estudie el código que compartiste y tomo nota del método que sigues.
Por lo que veo la clase clsConfig  toma los parámetros iniciales desde un módulo llamado ModGen en el método _new() así que tal vez tenga que modificar un poco la clase para que sea de uso mas general. Hice un proyecto vacío y luego copie las clases clsConfig y clsParametro para aislar la parte de gestión de json.
Dentro de un tiempo tal vez vuelva a la carga con la clase para json ya que me parece que es el método mas prolijo para gestionarla. Por ahora estoy usando un archivo .json y una colección y JSONEncode y JSONDecode.
Gracias por el aporte de código.
Saludos.

El método que uso actualmente es el siguiente:
partiendo de un archivo sFile "/ruta/del/archivo.json"
GAMBAS
  1.     sConfig = File.Load(sFile)
  2.     jConfig = JSON.FromString(sConfig, True)


Donde jConfig es una "Collection" luego para el flujo dle programa leo, escribo, agrego o retiro datos y claves de esta colección y al final del proceso guardo  archivo.json
GAMBAS
  1. File.Save(sFile, JSON.Encode(jConfig))


Saludos.