Autore Topic: [Risolto] dati Json  (Letto 588 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[Risolto] dati Json
« il: 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
« Ultima modifica: 02 Giugno 2019, 23:42:19 da dex »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:dati Json
« Risposta #1 il: 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
« Ultima modifica: 02 Giugno 2019, 11:21:20 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:dati Json
« Risposta #2 il: 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?

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:dati Json
« Risposta #3 il: 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...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:dati Json
« Risposta #4 il: 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