How to parse 3 GB json file

167 Views Asked by At

3 GB json file contains array of objects in form

[
    {
        "ariregistri_kood":16372442,
        "nimi":"000 Holdings OÜ",
        "yldandmed":{
            "ettevotteregistri_nr":null,
            "esmaregistreerimise_kpv":"23.11.2021",
            "kustutamise_kpv":null,
            "staatus":"R",
            "staatus_tekstina":"Registrisse kantud",
            "piirkond":5,
            "piirkond_tekstina":"Tartu",
            "piirkond_tekstina_pikk":"Tartu Maakohtu registriosakond",
            "evks_registreeritud":null,
            "evks_registreeritud_kande_kpv":null,
            "oiguslik_vorm":"OÜ",
            "oiguslik_vorm_nr":5,
            "oiguslik_vorm_tekstina":"Osaühing",
            "oigusliku_vormi_alaliik":null,
            "oigusliku_vormi_alaliik_tekstina":"",
            "asutatud_sissemakset_tegemata":true,
            "loobunud_vorminouetest":null,
            "on_raamatupidamiskohustuslane":false,
            "tegutseb":null,
            "tegutseb_tekstina":"Jah",
            "staatused":[
                {
                    "kaardi_piirkond":5,
                    "kaardi_nr":1,
                    "kaardi_tyyp":"R",
                    "kande_nr":1,
                    "staatus":"R",
                    "staatus_tekstina":"Registrisse kantud",
                    "algus_kpv":"23.11.2021"
                }
            ],
            "arinimed":[
                {
                    "kirje_id":9864760,
                    "kaardi_piirkond":5,
                    "kaardi_nr":1,
                    "kaardi_tyyp":"R",
                    "kande_nr":1,
                    "sisu":"000 Holdings OÜ",
                    "algus_kpv":"23.11.2021",
                    "lopp_kpv":null
                }
            ],
            "juhatuse_asukoha_aadressid":[
                {
                    "kirje_id":9864751,
                    "kaardi_piirkond":5,
                    "kaardi_nr":1,
                    "kaardi_tyyp":"R",
                    "kande_nr":1,
                    "riik":"AUS",
                    "riik_tekstina":"Austraalia",
                    "tanav_maja_korter":"313A/133 GOULBURN STREET, Surry Hills, NSW",
                    "aadress_ads__tyyp":"2",
                    "postiindeks":"2010",
                    "algu_kpvs":"23.11.2021",
                    "lopp_kpv":null
                }
            ],
            "kontaktisiku_aadressid":[
                {
                    "kirje_id":9864757,
                    "kaardi_piirkond":5,
                    "kaardi_nr":1,
                    "kaardi_tyyp":"R",
                    "kande_nr":1,
                    "riik":"EST",
                    "riik_tekstina":"Eesti",
                    "ehak":"0298",
                    "ehak_nimetus":"Kesklinna linnaosa, Tallinn, Harju maakond",
                    "tanav_maja_korter":"Harju maakond, Tallinn, Kesklinna linnaosa, Ahtri tn 12",
                    "aadress_ads__ads_oid":"ME00656588",
                    "aadress_ads__adr_id":2113048,
                    "aadress_ads__ads_normaliseeritud_taisaadress":"Harju maakond, Tallinn, Kesklinna linnaosa, Ahtri tn 12",
                    "aadress_ads__ads_normaliseeritud_taisaadress_tapsustus":null,
                    "aadress_ads__koodaadress":"377840298000005X600001EOT00000000",
                    "aadress_ads__adob_id":null,
                    "aadress_ads__tyyp":null,
                    "postiindeks":"10151",
                    "algus_kpv":"23.11.2021",
                    "lopp_kpv":null
                }
            ],
            "oiguslikud_vormid":[
                {
                    "kirje_id":9864754,
                    "kaardi_piirkond":5,
                    "kaardi_nr":1,
                    "kaardi_tyyp":"R",
                    "kande_nr":1,
                    "sisu":"OÜ",
                    "sisu_nr":5,
                    "sisu_tekstina":"Osaühing",
                    "algus_kpv":"23.11.2021",
                    "lopp_kpv":null
                }
            ],
            "kapitalid":[
                {
                    "kirje_id":9864758,
                    "kaardi_piirkond":5,
                    "kaardi_nr":1,
                    "kaardi_tyyp":"R",
                    "kande_nr":1,
                    "kapitali_suurus":"2500.00",
                    "kapitali_valuuta":"EUR",
                    "kapitali_valuuta_tekstina":"euro",
                    "algus_kpv":"23.11.2021",
                    "lopp_kpv":null
                }
            ],
            "majandusaastad":[
                {
                    "kirje_id":9864753,
                    "kaardi_piirkond":5,
                    "kaardi_nr":1,
                    "kaardi_tyyp":"R",
                    "kande_nr":1,
                    "maj_aasta_algus":"01.01",
                    "maj_aasta_lopp":"31.12",
                    "algus_kpv":"23.11.2021",
                    "lopp_kpv":null
                }
            ],
            "pohikirjad":[
                {
                    "kirje_id":9864752,
                    "kaardi_piirkond":5,
                    "kaardi_nr":1,
                    "kaardi_tyyp":"R",
                    "kande_nr":1,
                    "kinnitamise_kpv":"19.11.2021",
                    "muutmise_kpv":null,
                    "selgitus":null,
                    "algus_kpv":"23.11.2021",
                    "lopp_kpv":null,
                    "sisaldab_erioigusi":false
                }
            ],
            "sidevahendid":[
                {
                    "kirje_id":9864759,
                    "liik":"EMAIL",
                    "liik_tekstina":"Elektronposti aadress",
                    "sisu":"[email protected]",
                    "lopp_kpv":null,
                    "kaardi_piirkond":5,
                    "kaardi_nr":1,
                    "kaardi_tyyp":"R",
                    "kande_nr":1
                }
            ],
            "teatatud_tegevusalad":[
                {
                    "kirje_id":9000591556,
                    "emtak_kood":"73111",
                    "emtak_tekstina":"Reklaamiagentuurid",
                    "emtak_versioon":2,
                    "emtak_versioon_tekstina":null,
                    "nace_kood":"73.11",
                    "on_pohitegevusala":true,
                    "algus_kpv":"22.11.2021",
                    "lopp_kpv":null
                }
            ],
            "esitab_kasusaajad":true
        }
    },
    {
        "ariregistri_kood":12754230,
        "nimi":"001 group OÜ",
        "yldandmed":{
            "ettevotteregistri_nr":null,
            "esmaregistreerimise_kpv":"17.11.2014",
            "kustutamise_kpv":null,
            "staatus":"R",
            "staatus_tekstina":"Registrisse kantud",
...

Every property is in separate line. Cursor containing 3 columns:

ariregistri_kood I
emtak_kood C(5),
emtak_tekstina M

should created from this file.

I tried to parse it using

create cursor tala ( ariregistri_kood I, emtak_kood V(5), emtak_tekstina M )
fp  = fopen( '4gbfile.json' )
if fp<0
  messagebox('error')
  return
  endif
  
DO WHILE !FEOF(fp)
  rida = FGETS(fp)
  do case
    case  '"ariregistri_kood":' $ Rida
      insert into tala (regnr) values ( stre( rida, '"ariregistri_kood":' ) )

    * "emtak_kood":"73111",
    case  '"emtak_kood":' $ Rida
      repl emtak_kood with stre( rida, '"emtak_kood":"', '"' )
      
    * "emtak_tekstina":"Reklaamiagentuurid",
    case  '"emtak_tekstina":' $ Rida
      repl emtak_tekstina with stre( rida, '"emtak_tekstina":"', '"' )
endcase
  enddo

But got empty cursor since feof() returns immediately true for big file. Tried also nfjson from https://github.com/VFPX/nfJson But got out of memory error.

How to parse this file to get 3 properties?

Same data is also avaliable as xml file. If paring xml is more reasonable, xml can also parsed.

0

There are 0 best solutions below