En una entrada anterior se explicaba como pasar un JSON almacendao de forma especial en una tabla de una Base de datos a un DatagridView, en esta entrada veremos como generar una cadena de texto con formato JSON a partir de los datos cargados en el DataGridView, para ello basta implementar esta función de Visual Basic.
Se trata de una función recursiva, pues cada padre puede tener múltiples hijos.
Más imágenes como esta en tamaño real. |
En este caso concreto lee row.Cells(3) con valor a S para escribir, pero no es necesario, de hecho en el ejemplo todos vienen a S. Esto se utiliza por si hay nodos que no queremos mostrar.
'GENERA
UNA CADENA DE TEXTO CON FORMATO JSON A PARTIR DE UNA TABLA DE BBDD
'funcion recursiva
que genera un nuevo JSON a partir de los nodos Mandatory leidos en la tabla
Private Function GeneraNuevoJSON(ByVal output As String, Optional ByVal NodoABuscar As Integer = 0) As String
Dim NodoPadreABuscar As Integer
'Genera
cadena JSON a partir de los datos del DataGridView
For Each row As DataGridViewRow In grdDatosJSON.Rows
'Solo
los tiene en cuenta si son manadatory
If row.Cells(3).Value = "S" Then
'no
comienza hasta que encuentra nodo raiz
If row.Cells(0).Value = row.Cells(2).Value And NodoABuscar = 0 Then
If output <> "" Then
If output.Substring(output.Length - 1, 1)
<> "," Then
output = output
& ":{"
End If
End If
NodoPadreABuscar =
row.Cells(0).Value 'mi nodo
output = output & JsonConvert.SerializeObject(row.Cells(1).Value)
GeneraNuevoJSON(output,
NodoPadreABuscar)
'Normalmente por aquí no
pasará casi nunca pero tiene que estar por si un nodo raíz no tuviera hijos
If
antiguooutput.Substring(antiguooutput.Length - 1, 1) <> "," Then
output = antiguooutput
& ":" & Chr(34) & Chr(34) & "}"
Else
antiguooutput =
antiguooutput.TrimEnd(",") 'elimina
la última coma
output = antiguooutput
& "}," 'si escribe esto debe
eliminar la última coma
End If
Else
If NodoABuscar = row.Cells(2).Value Then
If NodoABuscar <> row.Cells(0).Value Then 'si
el nodo padre soy yo mismo, no hago nada
'si hay comilla al final, no
pone :{
If output.Substring(output.Length - 1, 1)
<> "," Then
output = output
& ":{"
End If
NodoPadreABuscar =
row.Cells(0).Value 'mi nodo
output = output & JsonConvert.SerializeObject(row.Cells(1).Value)
GeneraNuevoJSON(output, NodoPadreABuscar)
If
antiguooutput.Substring(antiguooutput.Length - 1, 1) <> "," Then
output =
antiguooutput & ":" & Chr(39) & row.Cells(7).Value
& Chr(39) & ","
Else
antiguooutput =
antiguooutput.TrimEnd(",") 'elimina
la última coma
output =
antiguooutput & "}," 'si escribe esto debe
eliminar la última coma
End If
End If
End If
End If
End If
Next
antiguooutput = output
GeneraNuevoJSON = output
End Function
El resultado final de esta función es una variable output que contiene una cadena de texto con formato JSON.
La función se llamará por ejemplo al pulsar un botón de un formulario que dé la orden de generar el JSON a partir de los datos que hay en el DataGridView.
Private Sub
BtnNuevoJSON_Click(sender As Object, e As EventArgs) Handles
BtnNuevoJSON.Click
Dim output As String = ""
output = GeneraNuevoJSON(output)
output =
output.TrimEnd(",") 'elimina ultima coma si viene
output = "{" & output
& "}"
MuestraJSON(output)
BtnDescargarJSON.Enabled = True
End Sub
La función MuestraJSON mostrará el JSON generado en un control TreeView, eso lo veremos en la próxima entrada. Mostrar en un TreeView un JSON
No hay comentarios:
Publicar un comentario