Spanish Trabajando con JSON

Santiago Russo

Member
Licensed User
Buenos días. Mi consulta es la siguiente. Estoy armando las estructuras JSON. Para ello uso JSONGenerator. El tema es que no consigo poner como corresponde los corchetes "[]" para indicar el array de mi estructura.
Lo hago gráfico:
[CODE lang="json" title="JSON"]{"data":
{ "valor": "hola",
"documento": 123456,
"Items": [{"1": "a"},
{"2": "b"},
{"3": "c"}
]
}
}
[/CODE]

Lo que no puede armar es la parte de los "[]"
Muestro el código:

[CODE lang="b4x" title="B4A"]'Mi JSON
'Dim Data As List
Private MiJSON As Map

Private JS As String
MiJSON.Initialize
MiJSON.Put("valor", "Hola")
MiJSON.Put("Documento", 123456)

' Aquí un mal intento hacer lo de los corchetes, sin éxito
' Private Items As Map
' Items.Initialize
' Items.Put("1", "a")
' Items.Put("2", "b")
' JSONGenerator.Initialize(Items)
' JS = JSONGenerator.ToPrettyString(2)
' Log(JS)
' JS = "[" & JS & "]"
' Data.Initialize
' Data.Add(JS)
' MiJSON.Put("Items", JS)

Private JSONGenerator As JSONGenerator

JSONGenerator.Initialize(MiJSON)

Log("MiJSON")
JS = JSONGenerator.ToPrettyString(2)
Log(JS)

Private MiJSON2 As Map
MiJSON2.Initialize
MiJSON2.Put("data", MiJSON)
JSONGenerator.Initialize(MiJSON2)
JS = JSONGenerator.ToPrettyString(2)
Log(JS)[/CODE]

Agradecería me indicaran como se forma el array dentro del JSON. Hasta ahora no lo logré.
Desde ya, muchas gracias nuevamente.
 
¿has probado esta herramienta? Pegas tu jSON y te genera el código:

Viene de aquí:

1583845108131.png
 
{"data": { "valor": "hola", "documento": 123456, "Items": [{"1": "a"}, {"2": "b"}, {"3": "c"} ] } }
No creo que te debas preocupar por poner tu los corchetes "[]", a menos de que sea una estructura "especial".
Parece un tanto extraña la estructura del json, especificamente en el arreglo de "Items". ¿Estás seguro que es correcta, o cómo la obtienes?

Lo más parecido es con un código como este:

[CODE lang="b4x" highlight="18-22"]
Sub DoJson
Private MiJSON As Map
Private data As Map
Private JS As String

MiJSON.Initialize
data.Initialize

data.Put("valor", "Hola")
data.Put("Documento", 123456)

MiJSON.Put("data",data)

Private Items As List
Items.Initialize

Private subItem As Map
subItem.Initialize
subItem.Put("1","a")
subItem.Put("2","b")
subItem.Put("3","c")

Items.Add(subItem)

data.Put("Items", Items)

Private JSONGenerator As JSONGenerator

JSONGenerator.Initialize(MiJSON)

Log("MiJSON")
JS = JSONGenerator.ToPrettyString(2)
Log(JS)

End Sub[/CODE]
Waiting for debugger to connect...
Program started.
MiJSON
{
"data": {
"valor": "Hola",
"Items": [
{
"1": "a",
"2": "b",
"3": "c"
}
],
"Documento": 123456
}
}
 
Hola. Claro. La he probado. Pero esa me "desarma" un JSON, lo que yo necesito es "armarlo". Exactamente al revés.
De ahí mi duda.
 
No creo que te debas preocupar por poner tu los corchetes "[]", a menos de que sea una estructura "especial".
Parece un tanto extraña la estructura del json, especificamente en el arreglo de "Items". ¿Estás seguro que es correcta, o cómo la obtienes?

Lo más parecido es con un código como este:

[CODE lang="b4x" highlight="18-22"]
Sub DoJson
Private MiJSON As Map
Private data As Map
Private JS As String

MiJSON.Initialize
data.Initialize

data.Put("valor", "Hola")
data.Put("Documento", 123456)

MiJSON.Put("data",data)

Private Items As List
Items.Initialize

Private subItem As Map
subItem.Initialize
subItem.Put("1","a")
subItem.Put("2","b")
subItem.Put("3","c")

Items.Add(subItem)

data.Put("Items", Items)

Private JSONGenerator As JSONGenerator

JSONGenerator.Initialize(MiJSON)

Log("MiJSON")
JS = JSONGenerator.ToPrettyString(2)
Log(JS)

End Sub[/CODE]
Waiting for debugger to connect...
Program started.
MiJSON
{
"data": {
"valor": "Hola",
"Items": [
{
"1": "a",
"2": "b",
"3": "c"
}
],
"Documento": 123456
}
}

Esta es la estructura real que debo armar para enviar:

[CODE lang="json" title="JSON"]{
"data": {
"id": 61,
"user_id": 61,
"profession_id": null,
"ocupation": null,
"province_id": null,
"work_hour_id": null,
"working_term_id": null,
"computing_level": 0,
"salary": 0,
"travel": 0,
"gender": null,
"created_at": "2020-03-04 19:43:06",
"updated_at": "2020-03-04 19:43:06",
"languages": []
}
}[/CODE]

En "languages", viene una serie de datos sobre los mismos, de ahí que es un array.
 
Ok!, esto tiene más sentido. Ahora, si lo que te está dando guerra es el array de "languages", proporciónanos la estructura de ese array para intentar ayudarte de manera mas completa. En tu primer ejemplo, se "desarma" generando errores.
También puedes ver en el código que te puse anteriormente, cómo está la lista de Items, compuesta por un Map.
 
Ok!, esto tiene más sentido. Ahora, si lo que te está dando guerra es el array de "languages", proporciónanos la estructura de ese array para intentar ayudarte de manera mas completa. En tu primer ejemplo, se "desarma" generando errores.
También puedes ver en el código que te puse anteriormente, cómo está la lista de Items, compuesta por un Map.

Ahora sí. Les mando el JSON como realmente se ve. Esto es medio complicado porque los datos los manejan en otro lado...
[CODE lang="json" title="JSON"]{
"data": {
"id": 61,
"user_id": 61,
"profession_id": null,
"ocupation": null,
"province_id": null,
"work_hour_id": null,
"working_term_id": null,
"computing_level": 0,
"salary": 0,
"travel": 0,
"gender": null,
"created_at": "2020-03-04 19:43:06",
"updated_at": "2020-03-04 19:43:06",
"languages": [
{
"id": 1,
"name": "Inglés",
"state": "Active",
"created_at": null,
"updated_at": null,
"pivot": {
"candidate_id": 61,
"language_id": 1
}
},
{
"id": 2,
"name": "Frances",
"state": "Active",
"created_at": null,
"updated_at": null,
"pivot": {
"candidate_id": 61,
"language_id": 2
}
}
]
}
}[/CODE]

A ver si con esto la cosa puede quedar completa.
Gracias.
 
Nota por favor, la estructura de mapas incrustados en mapas, y la colcación de la List.
[CODE lang="b4x" highlight="4,29,30,32,34"]
Sub DoJson
Private root As Map
Private data As Map
Private languages As List
Private pivot As Map

Private JS As String

root.Initialize
data.Initialize

data.Put("id", 61)
data.Put("user_id", 61)
data.Put("profession_id", Null)
data.Put("ocupation", Null)
data.Put("province_id", Null)
data.Put("work_hour_id", Null)
data.Put("working_term_id", Null)
data.Put("computing_level", 0)
data.Put("salary", 0)
data.Put("travel", 0)
data.Put("gender", Null)
data.Put("created_at", "2020-03-04 19,43,06")
data.Put("updated_at", "2020-03-04 19,43,06")

languages.Initialize
pivot.Initialize

languages.Add(CreateMap("id": 1, "name": "Inglés", "state": "Active", "created_at": Null, "updated_at": Null, "pivot" : CreateMap("candidate_id": 61, "language_id": 1)))
languages.Add(CreateMap("id": 2, "name": "Frances", "state": "Active", "created_at": Null, "updated_at": Null, "pivot" : CreateMap("candidate_id": 61, "language_id": 2)))

data.Put("languages",languages)

root.Put("data",data)


Private JSONGenerator As JSONGenerator

JSONGenerator.Initialize(root)

Log("MiJSON")
JS = JSONGenerator.ToPrettyString(2)
Log(JS)

End Sub[/CODE]

Waiting for debugger to connect...
Program started.
MiJSON
{
"data": {
"ocupation": null,
"gender": null,
"languages": [
{
"updated_at": null,
"name": "Inglés",
"created_at": null,
"pivot": {
"candidate_id": 61,
"language_id": 1
},
"id": 1,
"state": "Active"
},
{
"updated_at": null,
"name": "Frances",
"created_at": null,
"pivot": {
"candidate_id": 61,
"language_id": 2
},
"id": 2,
"state": "Active"
}
],
"created_at": "2020-03-04 19,43,06",
"salary": 0,
"updated_at": "2020-03-04 19,43,06",
"user_id": 61,
"profession_id": null,
"province_id": null,
"id": 61,
"work_hour_id": null,
"working_term_id": null,
"travel": 0,
"computing_level": 0
}
}
 
Nota por favor, la estructura de mapas incrustados en mapas, y la colcación de la List.
[CODE lang="b4x" highlight="4,29,30,32,34"]
Sub DoJson
Private root As Map
Private data As Map
Private languages As List
Private pivot As Map

Private JS As String

root.Initialize
data.Initialize

data.Put("id", 61)
data.Put("user_id", 61)
data.Put("profession_id", Null)
data.Put("ocupation", Null)
data.Put("province_id", Null)
data.Put("work_hour_id", Null)
data.Put("working_term_id", Null)
data.Put("computing_level", 0)
data.Put("salary", 0)
data.Put("travel", 0)
data.Put("gender", Null)
data.Put("created_at", "2020-03-04 19,43,06")
data.Put("updated_at", "2020-03-04 19,43,06")

languages.Initialize
pivot.Initialize

languages.Add(CreateMap("id": 1, "name": "Inglés", "state": "Active", "created_at": Null, "updated_at": Null, "pivot" : CreateMap("candidate_id": 61, "language_id": 1)))
languages.Add(CreateMap("id": 2, "name": "Frances", "state": "Active", "created_at": Null, "updated_at": Null, "pivot" : CreateMap("candidate_id": 61, "language_id": 2)))

data.Put("languages",languages)

root.Put("data",data)


Private JSONGenerator As JSONGenerator

JSONGenerator.Initialize(root)

Log("MiJSON")
JS = JSONGenerator.ToPrettyString(2)
Log(JS)

End Sub[/CODE]

Waiting for debugger to connect...
Program started.
MiJSON
{
"data": {
"ocupation": null,
"gender": null,
"languages": [
{
"updated_at": null,
"name": "Inglés",
"created_at": null,
"pivot": {
"candidate_id": 61,
"language_id": 1
},
"id": 1,
"state": "Active"
},
{
"updated_at": null,
"name": "Frances",
"created_at": null,
"pivot": {
"candidate_id": 61,
"language_id": 2
},
"id": 2,
"state": "Active"
}
],
"created_at": "2020-03-04 19,43,06",
"salary": 0,
"updated_at": "2020-03-04 19,43,06",
"user_id": 61,
"profession_id": null,
"province_id": null,
"id": 61,
"work_hour_id": null,
"working_term_id": null,
"travel": 0,
"computing_level": 0
}
}

De 10. Lo analizo y luego comento. Mil gracias.
 
Back
Top