Gambas-it

Gambas3 => Programmazione => Topic aperto da: dex - 02 Giugno 2019, 00:06:36

Titolo: [Risolto] dati Json
Inserito da: dex - 02 Giugno 2019, 00:06:36
ciao raga
devo estrarre dei dati da una stringa json in base ad alcuni parametri tipo:
per eta nome cognome e altezza
per professione nome cognome e citta

Codice: [Seleziona]
[{"digits":4,"eta":25,"altezza":175,"nome":mario,"cognome":"cianci","citta":roma,"professione":impiegato},{"digits":4,"eta":36,"altezza":168,"nome":alessandro,"cognome":"borghi","citta":perugia,"professione":avvocato},{"digits":2,"eta":31,"altezza":172,"nome":rosanna,"cognome":"Giandini","citta":pescara,"professione":medico},{"digits":3,"eta":24,"altezza":179,"nome":matteo,"cognome":"cervini","citta":bari,"professione":studente},{"digits":2,"eta":47,"altezza":174,"nome":vincenzo,"cognome":"giannotti","citta":napoli,"professione":operaio}]

ho provato con

Codice: [Seleziona]
Dim srtjson As String
Dim coljson As Variant
Dim Nome As String
Dim Cognome As String
Dim eta as String
Dim Citta as String
Dim i as Integer

coljson = JSON.Decode(srtjson, True)

For i = 0 To colJson.count - 1

   nome = coljson[x]["eta"] ["31"]
   cognome coljson[x]["eta"] ["31"]

Next


va in errore
Titolo: Re:dati Json
Inserito da: Gianluigi - 02 Giugno 2019, 11:17:43
Io di json ne capisco poco, ma sembra che il tuo file sia parecchio incasinato (nomi non quotati) se provi così si carica.
Prima copi i dati così in un file di testo e lo nomini test.json:
Codice: [Seleziona]
{
"utenti": [
{
 "digits": "4",
 "eta": 25,
 "altezza": 175,
 "nome": "mario",
 "cognome":"cianci",
 "citta": "roma",
 "professione": "impiegato"
},
{"digits": "4",
 "eta": 36,
 "altezza": 168,
 "nome": "alessandro",
 "cognome": "borghi",
 "citta": "perugia",
 "professione": "avvocato"
},
{
 "digits": "2",
 "eta": 31,
 "altezza": 172,
 "nome": "rosanna",
 "cognome": "Giandini",
 "citta": "pescara",
 "professione": "medico"
},
{
 "digits": "3",
 "eta": 24,
 "altezza": 179,
 "nome": "matteo",
 "cognome":"cervini",
 "citta":"bari",
 "professione":"studente"
},
{
 "digits": "5",
 "eta": 47,
 "altezza": 174,
 "nome": "vincenzo",
 "cognome": "giannotti",
 "citta": "napoli",
 "professione": "operaio"
}
]
}

quindi lo carichi così.

Dim hColl As Collection = JSON.Decode(File.Load("../test.json"))

Ti passo un codice che ho scaricato tempo fa forse dalla Spagna (serve una gridview):

Codice: [Seleziona]
Public Sub Form_Open()

  Dim hColl As Collection = JSON.Decode(File.Load("../test.json"))
  Dim siCount, siRow, siCol As Short
  Dim sKey As Variant

  GridView1.Columns.count = 7

  For Each sKey In hColl["utenti"][0]
    GridView1.Columns[siCol].Title = UCase(hColl["utenti"][0].Key)
    Inc siCol
  Next

  For siCount = 0 To hColl["utenti"].max
    Inc GridView1.rows.count
    GridView1[siCount, 0].Text = hColl["utenti"][siCount]["digits"]
    GridView1[siCount, 1].Text = hColl["utenti"][siCount]["eta"]
    GridView1[siCount, 2].Text = hColl["utenti"][siCount]["altezza"]
    GridView1[siCount, 3].Text = hColl["utenti"][siCount]["nome"]
    GridView1[siCount, 4].Text = hColl["utenti"][siCount]["cognome"]
    GridView1[siCount, 5].Text = hColl["utenti"][siCount]["citta"]
    GridView1[siCount, 6].Text = hColl["utenti"][siCount]["professione"]
  Next

  GridView1.Columns.Width = -1

End
Titolo: Re:dati Json
Inserito da: dex - 02 Giugno 2019, 22:07:56
Ciao Gian
grazie dell'aiuto io di json sono completamente a digiuno.
i nomi non sono quotati per colpa mia, per la privacy ho cambiato nomi e cognomi originali e nel farlo ho cancellato le ".
Nel file originale sono quotati.

interessante la GridView, potrei scaricare in un array.

mi sfugge questo passaggio, come trasformare il mio file a cosi:

Codice: [Seleziona]
{
"utenti": [
{
 "digits": "4",
 "eta": 25,
 "altezza": 175,
 "nome": "mario",
 "cognome":"cianci",
 "citta": "roma",
 "professione": "impiegato"
},
{"digits": "4",
 "eta": 36,
 "altezza": 168,
 "nome": "alessandro",
 "cognome": "borghi",
 "citta": "perugia",
 "professione": "avvocato"
},
{
 "digits": "2",
 "eta": 31,
 "altezza": 172,
 "nome": "rosanna",
 "cognome": "Giandini",
 "citta": "pescara",
 "professione": "medico"
},
{
 "digits": "3",
 "eta": 24,
 "altezza": 179,
 "nome": "matteo",
 "cognome":"cervini",
 "citta":"bari",
 "professione":"studente"
},
{
 "digits": "5",
 "eta": 47,
 "altezza": 174,
 "nome": "vincenzo",
 "cognome": "giannotti",
 "citta": "napoli",
 "professione": "operaio"
}
]
}

utenti e le { le posso aggiungere io ma per trasformarlo in righe? esiste una funzione di json oppure devo farlo io da codice?
Titolo: Re:dati Json
Inserito da: Gianluigi - 02 Giugno 2019, 23:06:26
Ciao Gian
grazie dell'aiuto io di json sono completamente a digiuno.
Siamo in due  ;D
Citazione
utenti e le { le posso aggiungere io ma per trasformarlo in righe? esiste una funzione di json oppure devo farlo io da codice?
Sono quasi certo che non serva, tu devi solo aggiungere  "utenti" e chiudere tutto fra parentesi.
Credo inoltre che il primo dato debba essere una stringa magari aggiungendo un ID che poi scarti...
Titolo: Re:dati Json
Inserito da: dex - 02 Giugno 2019, 23:41:52
Grazie Gian
Risolto

per ora scarico nella griglia, ho fatto una modifica ed evito di fare il file.

posto qui il codice se dovesse servire ad altri

Codice: [Seleziona]
Dim srtjson As String
    Dim hColl As Collection     
    Dim siCount, siRow, siCol As Short
    Dim sKey As Variant   
    Dim UrlDati As String
   
    UrlDati = TextBox1.text
   
    Shell "curl '" & UrlDati & "'" To srtjson
   
    srtjson = "{" & Chr(34) & "utenti" & Chr(34) & ":" & srtjson & "}"
       
    GridView1.Header = GridView1.Horizontal
    GridView1.Columns.count = 7
   
    hColl = JSON.Decode(srtjson)
   
    GridView1.Clear
   
    For Each sKey In hColl["utenti"][0]
      GridView1.Columns[siCol].title = UCase(hColl["utenti"][0].Key)
    Inc siCol
  Next

  For siCount = 0 To hColl["utenti"].max
    Inc GridView1.rows.count
    GridView1[siCount, 0].Text = hColl["utenti"][siCount]["digits"]
    GridView1[siCount, 1].Text = hColl["utenti"][siCount]["eta"]
    GridView1[siCount, 2].Text = hColl["utenti"][siCount]["altezza"]
    GridView1[siCount, 3].Text = hColl["utenti"][siCount]["nome"]
    GridView1[siCount, 4].Text = hColl["utenti"][siCount]["cognome"]
    GridView1[siCount, 5].Text = hColl["utenti"][siCount]["citta"]
    GridView1[siCount, 6].Text = hColl["utenti"][siCount]["professione"]
  Next

  GridView1.Columns.Width = -1