Newsgroup: it.comp.appl.access
Titolo: Lettura/Decodifica files JSON

M'è capitato qualche volta di leggere files Json (magari restituiti da un qualche webservice). In genere erano files semplici, quindi decodificabili con un pò d'arte d'arrangiarsi. Ma all'aumentare della complessità cambia ovviamente tutto.
 
Voi che metodi utilizzate per la decodifica dei suddetti (esiste qualcosa tipo MS DOM)?
 
Saluti estivi


ho una routine che funziona di solito bene trasformando json in un 
oggetto tipo dictionary
 
in pratica da un json tipo
 
{"coord":{"lon":-82.4543,"lat":27.0998},"weather":[{"id":800,"main":"Clear","description":"cielo 
sereno","icon":"01d"}],"base":"stations","main":{"temp":29.9,"feels_like":36.29,"temp_min":27.86,"temp_max":31.67,"pressure":1018,"humidity":76},"visibility":10000,"wind":{"speed":2.68,"deg":85,"gust":6.71},"clouds":{"all":1},"dt":1629383192,"sys":{"type":2,"id":2005161,"country":"US","sunrise":1629371001,"sunset":1629417824},"timezone":-14400,"id":4176380,"name":"Venice","cod":200}
 
ti ritorna un oggetto
 
obj.coord.lon --> -82.4543
obj.coord.lat --> 27.0998
obj.weather(0).id --> 800
obj.weather(0).main --> Clear
obj.weather(0).description --> cielo sereno
obj.weather(0).icon --> 01d
obj.base --> stations
obj.main.temp --> 29.9
obj.main.feels_like --> 36.29
obj.main.temp_min --> 27.86
obj.main.temp_max --> 31.67
obj.main.pressure --> 1018
obj.main.humidity --> 76
obj.visibility --> 10000
obj.wind.speed --> 2.68
obj.wind.deg --> 85
obj.wind.gust --> 6.71
obj.clouds.all --> 1
obj.dt --> 1629383192
obj.sys.type --> 2
obj.sys.id
 --> 2005161
obj.sys.country --> US
obj.sys.sunrise --> 1629371001
obj.sys.sunset --> 1629417824
obj.timezone --> -14400
obj.id
 --> 4176380
obj.name
 --> Venice
obj.cod --> 200
 
quindi ricavare le informazioni da quel oggetto è molto semplice
 
la uso per cambi, meteo, ricavare gli indirizzi da google maps api
 
se posti un json di prova ti dico se funziona anche per il tuo caso
 
 
BFS
 
 
 
 
 


Allora, per le mie limitate esigenze utilizzo un metodo simile al tuo.
L'esempio che hai postato è tipico per quei 'filettini' restituiti da web service, e alla fine si leggono con un pò d'inventiva.
 
Io volevo "mettere le mani avanti" pensando alla possibilità che mi capitino files di altra complessità: pensa a una ipotetica Fattura elettronica Json.
Comunque dalla tua risposta evinco che pure tu ti stai affidando all'autarchia, quindi non esistono librerie gratuite funzionali alla decodifica di tali files...
 
Saluti
 
 

prova con queste librerie
 
https://github.com/VBA-tools/VBA-Web
 
 
 

 
https://github.com/VBA-tools/VBA-Web
 
 
 
https://github.com/VBA-tools/VBA-JSON
 
 
Al primo sguardo sembra un ottimo lavoro: pure lui converte il Json in oggetto Dictionary ma in apparenza senza limitazioni (mi riferisco ai miei veloci algoritmini, non posso giudicare il lavoro di BFS).
Purtroppo è seccante il prerequisito di "Microsoft Scripting Runtime" nei riferimenti (su certi sistemi è disabilitato) ma probabilmente se ne può fare a meno con qualche ritocco.
Tu hai provato la faccenda su files JSon di una certa complessità?
 
Saluti

Salve,
 
Simone Calligaris:

Ci sono state a lungo discussioni sull'affidabilità del parser di Tim 
Hall. Jack Leach una volta l'ha commentato in dettaglio, dicendo che il 
codice di Tim è inaffidabile con strutture JSON complesse.
 
Discussione UA che il parser fallisce su alcuni file JSON e approccio 
generale a JSON da VBA:
http://www.utteraccess.com/forum/index.php?showtopic=2045170
 
 
Qui il "controcodice" di Jack (ma usa il riferimento a ScriptControl 
ActiveX): 
https://dymeng.com/parsing-json-with-vba/
 
 
Un'altra soluzione sarebbe il tool commerciale di Colin Riddington "JSON 
Analyse & Transform for Access": 
http://www.mendipdatasystems.co.uk/json-analyse-transform/4594138310
 
C'è anche un video di 18 minuti dalla mia ultima conferenza: 
https://www.youtube.com/watch?v=zH6yUtsjrGQ
 
 
Ciao
Karl
*********
http://AccessDevCon.com
 
Access FAQ: 
https://www.donkarl.com/it
 

 
http://www.mendipdatasystems.co.uk/json-analyse-transform/4594138310
 
 
Come al solito avrà una politica di licenze incompatibile con una distribuzione estesa.
A parte ciò, non è possibile scaricare alcunchè dal sito (nemmeno la versione Demo) quindi non m'è ben chiaro come funzioni.
Ti chiedo ragguagli:
 
1- Presumo che il tool consista in librerie "chiuse" esterne (non codice VBA come nella soluzione proposta da Tim Hall).
2- Presumo che dall'applicazione Access si referenzi una libreria, anche con associazione tardiva, da utilizzare per leggere programmaticamente i vari "tags" Json del file.
 
Giusto, sbagliato?
 
Saluti

 Giusto, sbagliato?
 
Ho tradotto e inoltrato le tue domande all'autore del tool Colin 
Riddington. Si scusa per i link interrotti. Ci sono problemi perché le 
pagine sono ancora basate su Flash e saranno convertite solo più tardi 
quest'anno. Ecco le sue risposte:
 
*****************
1. The JATFA application is supplied as an ACCDB file for use by 
developers and all program code is available
 
2. The licensing info is summarised on the JATFA purchase page:
 
http://www.mendipdatasystems.co.uk/buy-now/4585140615/json-analyse-transform-for-access-(jatfa)/11254701
 
 
The licence allows users to install the application on 2 computers
Full program code and 90 days email support are included
 
Additional licenses can be purchased if required. The cost is £60 GBP 
for each license.
 
3. The cut-down evaluation version can be downloaded from: 
http://www.mendipdatasystems.co.uk/#/jatfa-older-versions/4594110256
.
 
There is no time limit on its use but the evaluation version is not as 
fully featured as the version available for purchase.
 
4. As stated above, all the VBA code is provided and there are no 
proprietary libraries (closed or open)
 
In fact, Tim Hall’s code is currently used for a small part of the 
application – mainly for reading the files into Access.
 
However, that will be phased out in the next version as its usage causes 
a ‘bottleneck’ in handling very large JSON files (above around 10MB)
 
The new version overcomes that (successfully tested up to 150MB files) 
and smaller files are also loaded faster.
 
5. The code does indeed programmatically analyse the various tags of the 
JSON file, identifies datatypes and field sizes, creates tables based on 
the analysis and then transform functions are created by the application 
to populate the tables in Access.
 
For many JSON files, the whole process is almost completely automated. 
However, it is also possible to intervene manually to modify the tables 
& transform functions where these need to be treated as ‘special cases’.
 
The whole process is described in detail in the attached PDF which is 
the user guide to the release version of JATFA.
 
*****************
 
Fammi sapere se vuoi il PDF che ha menzionato. Poi lo metterò a tua 
disposizione per il download.


 quest'anno. 
 
 
Karl, ti ringrazio per la cortesia.
La cosa migliore sarebbe poter testare la versione "lite":
 
3. The cut-down evaluation version can be downloaded from:
http://www.mendipdatasystems.co.uk/#/jatfa-older-versions/4594110256
. 
 
 ma anche in questo caso pare inaccessibile.
Comunque ho archiviato il link tra i preferiti e se/quando ne avrò bisogno sarà un'opzione prioritaria.
E a proposito, sai dirmi qual è la soluzione più utilizzata dagli Accessisti di tua conoscenza (e ne conosci molti in the world) per queste esigenze?
 
Saluti da Simone
 
 

Hi Simone
Apologies for the difficulties you are having accessing parts of my website.
The link to the evaluation version shouldn't have the # in it. My error!
The correct link is 
http://www.mendipdatasystems.co.uk/jatfa-older-versions/4594110256
 
That is definitely working. The webpage includes the evaluation version and a related PDF.
Do let me know if you are still having issues
 
If you can email me at 
in...@mendipdatasystems.co.uk
, I will send you the User Guide PDF for the full commercial version of JATFA so you can understand how it works in detail.
 
As already stated, there are issues with using Tim Hall's code. Although it can work well, it also fails on some very simple & valid JSON files. It is for that reason that I make very little use of it and am in the process of phasing it out completely
 
Hope that helps 
 
Colin
 
 

 ...sai dirmi qual è la soluzione più utilizzata dagli Accessisti di tua conoscenza (e ne conosci molti in the world) per queste esigenze
La mia impressione è che il più conosciuto e utilizzato sia ancora il 
codice di Tim Hall, almeno finché non facciamo notare i problemi alla 
gente. Poi vengono gli altri già menzionati qui: codici fatti in casa, 
altri in giro per il web come quello di Jack Leach, deviazioni 
attraverso altre librerie/Excel/PowerQuery etc., il tool di Colin....
 
Non ci sono standard, probabilmente finché il team di Access non 
consegna qualcosa. L'abbiamo chiamato diverse volte, ma non c'è niente 
in vista.
