0

I have the following convoluted JSON and I'm trying to figure out an efficient way to parse it and then store it (desirable to be directly written into a PostgreSQL db):

{'rfqNoticeId': 100100261,
 'isUtilityContract': False,
 'caNoticeEdit_New': {'publicationDetailsModel': {'caPublicationDate': '2020-09-01T15:02:32+03:00',
                                                  'publicationDate': '2020-04-14T09:41:17+03:00',
                                                  'jouePublicationNumber': '',
                                                  'noticeNo': 'SCN1066717'},
                      'section0_New': {'sentToJOUE': False,
                                       'tedNoticeNo': None,
                                       'completeTedModel': {'caNoticeId': 0,
                                                            'ojeuNoticeNoYear': None,
                                                            'ojeuNoticeNoSecondPart': None,
                                                            'ojeuNoticeNoThirdPart': None,
                                                            'ojeuNoticeDate': None},
                                       'canEdit': False,
                                       'caNoticeId': 0,
                                       'sectionName': None,
                                       'sectionCode': None,
                                       'noticePreviousPublication': None},
                      'section1_New': {'section1_1': {'caAddress': {'noticeId': 100389891,
                                                                    'officialName': 'MUNICIPIUL MANGALIA',
                                                                    'address': 'Strada: Sos Constantei , nr. 13',
                                                                    'city': 'Mangalia',
                                                                    'cityItem': {'id': 7200, 'text': 'Mangalia', 'localeKey': ''},
                                                                    'postalCode': '905500',
                                                                    'postalCodeItem': None,
                                                                    'countryID': 1,
                                                                    'country': 'Romania',
                                                                    'countryItem': {'id': 1, 'text': 'Romania', 'localeKey': 'RO'},
                                                                    'county': {'id': 15, 'text': 'Constanta', 'localeKey': 'CT'},
                                                                    'email': '[email protected]',
                                                                    'phone': '+40 241751060',
                                                                    'fax': '+40 241755606',
                                                                    'contactPoints': 'CALIN DIDI GEORGE',
                                                                    'attentionTo': 'CALIN DIDI GEORGE',
                                                                    'caMainAddressUrl': 'www.mangalia.ro',
                                                                    'buyerProfileUrl': 'www.e-licitatie.ro',
                                                                    'nutsCodeID': 28,
                                                                    'nutsCode': 'System.Data.Entity.DynamicProxies.NUTSCode_547C7532A1C13D2DD8DABA397AFE64934E6300F80287E631C82996E76CE950EB',
                                                                    'nutsCodeItem': {'id': 28, 'text': 'RO223 Constanta', 'localeKey': None},
                                                                    'contactPerson': 'CALIN DIDI GEORGE',
                                                                    'internetAddressesUrl': ['www.mangalia.ro'],
                                                                    'electronicInfoAccessUrl': None,
                                                                    'electronicDocumentsSendingUrl': None,
                                                                    'isSME': False,
                                                                    'sysNoticeEntityTypeID': 1,
                                                                    'noticeEntityAddressId': 101882964,
                                                                    'entityId': 2085,
                                                                    'entityItem': None,
                                                                    'isPublishingAgreed': None,
                                                                    'nationalIDNumber': '4515255'},
                                                      'canEdit': False,
                                                      'caNoticeId': 100157051,
                                                      'sectionName': None,
                                                      'sectionCode': None,
                                                      'noticePreviousPublication': None},
                                       'section1_2_New': {'isCommonProcurement': False,
                                                          'commonProcurementLaw': None,
                                                          'isAwardedByCentralAcquisitionOrgan': False,
                                                          'otherCANoticeAdresses': [],
                                                          'canEdit': False,
                                                          'caNoticeId': 100157051,
                                                          'sectionName': None,
                                                          'sectionCode': None,
                                                          'noticePreviousPublication': None},
                                       'section1_4_New': {'caTypeId': 10,
                                                          'caType': {'id': 10,
                                                                     'text': 'Autoritatea regională sau locală',
                                                                     'localeKey': 'Common.Clasiff.ContractingAuthorityType.RegionalOrLocalAuthority'},
                                                          'ifOthersThenSpecify': None,
                                                          'caNoticeId': 100157051,
                                                          'sectionName': None,
                                                          'sectionCode': None,
                                                          'noticePreviousPublication': None},
                                       'section1_5': {'mainActivityId': 1,
                                                      'mainActivity': {'id': 1,
                                                                       'text': 'Servicii generale ale administratiilor publice',
                                                                       'localeKey': 'Common.Clasiff.ActivityType.GeneralPublicServices'},
                                                      'ifOthersThenSpecify': None,
                                                      'caNoticeId': 100157051,
                                                      'sectionName': None,
                                                      'sectionCode': None,
                                                      'noticePreviousPublication': None}},
                      'section2_New': {'section2_1_New': {'contractTitle': 'Servicii de proiectare privind realizarea Pth, DE, PAC, POE, documentatii tehnice necesare in vederea obtinerii avizelor/ acordurilor/ autorizatiilor si asistenta tehnica din partea proiectantului pentru realizarea investiţiei pentru obiectivul de investitii cu titlul “Extindere si dotare ambulatoriu, Spital Municipal Mangalia”',
                                                          'referenceNumber': '4515255_2020_PAAPD1136420',
                                                          'mainCPVCode': {'id': 18143,
                                                                          'text': 'Servicii de proiectare tehnica pentru constructia de lucrari publice (Rev.2)',
                                                                          'localeKey': '71322000-1'},
                                                          'sysAcquisitionContractType': {'id': 2,
                                                                                         'text': 'Servicii',
                                                                                         'localeKey': 'Common.Clasiff.SysAcquisitionContractType.Services'},
                                                          'shortDescription': 'Se vor presta in conformitate cu cerintele Studiului de Fezabilitate - Servicii de proiectare privind realizarea Pth, DE, PAC, POE, documentatii tehnice necesare in vederea obtinerii avizelor/ acordurilor/ autorizatiilor si asistenta tehnica din partea proiectantului pentru realizarea investiţiei pentru obiectivul de investitii cu titlul “Extindere si dotare ambulatoriu, Spital Municipal Mangalia”,  astfel:\n1.\tDocumentatiile tehnice necesare in vederea obtinerii avizelor/acordurilor/autorizatiilor\n2.\tProiect tehnic si detalii de executie\n3.\tAsistenta tehnica din partea proiectantului pe perioada de executie a lucrarilor si la fazele determinante.\n\nValoarea estimata pentru serviciile de proiectare ce fac obiectul contractului este formata din:\nCap. 3.5.4. - Valoarea estimata - Documentatiile tehnice necesare in vederea obtinerii avizelor/acordurilor/autorizatiilor: 0 lei fara TVA;\nCap. 3.5.6. - Valoarea estimata - Proiect tehnic si detalii de executie: 130.000,00 lei fara TVA;\nCap. 3.8.1. - Valoarea estimata - Asistenta tehnica din partea proiectantului: 64.675,90 lei fara TVA;\nValoarea estimata fara TVA: 194.675,90\t                                            \tMonedă: RON\nAtentie: Termenul in care autoritatea contractanta va raspunde in mod clar si complet tuturor solicitarilor de clarificari sau informatii suplimentare este de 3 zile inainte de data limita de depunere a ofertelor, in masura in care aceste solicitari vor fi adresate in termenul prevazut la sectiunea I din Fisa de Date/ Instructiunile pentru orfertanti, respectiv 6 zile inainte de data limita de depunere a ofertelor.',
                                                          'hasLots': False,
                                                          'numberOfLots': None,
                                                          'shouldShowSection217': True,
                                                          'totalAcquisitionValue': 78000.0,
                                                          'totalRONAcquisitionValueForPAAP': 78000.0,
                                                          'lowestOffer': 0.0,
                                                          'highestOffer': 0.0,
                                                          'currency': {'id': 1, 'text': 'Leu', 'localeKey': 'RON'},
                                                          'canEdit': False,
                                                          'caNoticeId': 100157051,
                                                          'sectionName': None,
                                                          'sectionCode': None,
                                                          'noticePreviousPublication': None},
                                       'section2_2_New': {'showPublishingAgreedSection': False,
                                                          'previousPublication': True,
                                                          'descriptionList': [{'noticeLotID': 101033604,
                                                                               'contractTitle': 'Default lot',
                                                                               'lotNumber': '1',
                                                                               'mainCPVCodes': {'id': 18143,
                                                                                                'text': '71322000-1 Servicii de proiectare tehnica pentru constructia de lucrari publice (Rev.2)',
                                                                                                'localeKey': None},
                                                                               'secondaryCPVCodes': [],
                                                                               'nutsCode': {'id': 11740, 'text': 'RO223 Constanţa', 'localeKey': None},
                                                                               'mainLocation': 'Municipiul Mangalia',
                                                                               'shortDescription': 'Se vor presta in conformitate cu cerintele Studiului de Fezabilitate - Servicii de proiectare privind realizarea Pth, DE, PAC, POE, documentatii tehnice necesare in vederea obtinerii avizelor / acordurilor / autorizatiilor si asistenta tehnica din partea proiectantului pentru realizarea investiţiei pentru obiectivul de investitii cu titlul “Extindere si dotare ambulatoriu, Spital Municipal Mangalia”,  astfel: \n1.\tDocumentatiile tehnice necesare in vederea obtinerii avizelor/acordurilor/autorizatiilor\n2.\tProiect tehnic si detalii de executie\n3.\tAsistenta tehnica din partea proiectantului pe perioada de executie a lucrarilor si la fazele determinante.\n\nPotrivit devizului general realizat la faza de SF, valoarea estimata pentru serviciile de proiectare ce fac obiectul contractului este formata din: \nCap. 3.5.4. - Valoarea estimata - Documentatiile tehnice necesare in vederea obtinerii avizelor/acordurilor/autorizatiilor: 0 lei fara TVA
                                                                               \nCap. 3.5.6. - Valoarea estimata - Proiect tehnic si detalii de executie: 130.000, 00 lei fara TVA
                                                                               \nCap. 3.8.1. - Valoarea estimata - Asistenta tehnica din partea proiectantului: 64.675, 90 lei fara TVA
                                                                               \nValoarea estimata fara TVA: 194.675, 90\t
                                                                               \tMonedă: RON',
                                                                               'noticeAwardCriteriaList': [{'noticeAwardCriteriaID': 100280421,
                                                                                                            'noticeAwardCriteriaName': 'Pretul ofertei',
                                                                                                            'noticeAwardCriteriaDescription': 'Componenta financiara',
                                                                                                            'noticeAwardCriteriaWeight': 70.0,
                                                                                                            'noticeAwardCriteriaOrder': 1,
                                                                                                            'algorithmDescription': 'Punctajul se acorda astfel: a) Pentru cel mai scazut dintre preturi se acorda punctajul maxim alocat; b) Pentru celelalte preturi ofertate punctajul P(n) se calculeaza proportional, astfel: P(n) = (Pret minim ofertat / Pret n) x punctaj maxim alocat.',
                                                                                                            'isElectronicCriteria': False,
                                                                                                            'isPriceCriteria': True,
                                                                                                            'isFrameworkAgreementCriteria': False,
                                                                                                            'directProportional': None,
                                                                                                            'sysAwardCriteriaTypeId': None},
                                                                                                           {'noticeAwardCriteriaID': 100280420,
                                                                                                            'noticeAwardCriteriaName': '1. Inginer proiectant constructii noi/modernizare/reabilitare/extindere aferente constructiilor civile',
                                                                                                            'noticeAwardCriteriaDescription': 'Inginer proiectant constructii noi/modernizare/reabilitare/extindere aferente constructiilor civile: participarea expertului propus in calitate de  Inginer proiectant de constructii noi / modernizare / reabilitare / extindere aferente constructiilor civile in cadrul unor contracte de servicii de proiectare la nivelul carora sa fi desfasurat respectivele activitati, privind elaborarea si/sau actualizarea si/sau revizuirea de proiecte tehnice pentru constructii noi / modernizare / reabilitare / extindere aferente constructiilor civile.',
                                                                                                            'noticeAwardCriteriaWeight': 10.0,
                                                                                                            'noticeAwardCriteriaOrder': 2,
                                                                                                            'algorithmDescription': 'Inginer proiectant de construcții civile, industriale si agricole participarea expertului propus in cadrul unor contracte de proiectare la nivelul carora sa fi desfasurat respectivele activitati, privind elaborarea si/sau actualizarea si/sau revizuirea de proiecte tehnice pentru constructii noi / modernizare / reabilitare / extindere aferente constructiilor civile, in cadrul carora sa fi ocupat pozitia de Inginer proiectant de construcții civileindustriale si agricole, se va puncta astfel:\n- pentru 2-3 proiecte/contracte la care a participat - 2 puncte\n- pentru 4-5 proiecte/contracte la care a participat- 5 puncte\n- peste 5 proiecte/contracte la care a participat- 10 puncte',
                                                                                                            'isElectronicCriteria': None,
                                                                                                            'isPriceCriteria': None,
                                                                                                            'isFrameworkAgreementCriteria': None,
                                                                                                            'directProportional': None,
                                                                                                            'sysAwardCriteriaTypeId': None},
                                                                                                           {'noticeAwardCriteriaID': 100280419,
                                                                                                            'noticeAwardCriteriaName': '2. Inginer instalații pentru constructii',
                                                                                                            'noticeAwardCriteriaDescription': 'Inginer instalații penru constructii: participarea expertului propus in calitate de Inginer instalatii pentru constructii in cadrul unor contracte de proiectare la nivelul carora sa fi desfasurat respectivele activitati, privind elaborarea si/sau actualizarea si/sau revizuirea de proiecte tehnice pentru constructii noi / modernizare / reabilitare / extindere aferente constructiilor civile.',
                                                                                                            'noticeAwardCriteriaWeight': 10.0,
                                                                                                            'noticeAwardCriteriaOrder': 3,
                                                                                                            'algorithmDescription': 'Inginer instalații penru constructii: participarea expertului propus in calitate de Inginer instalatii pentru constructii in cadrul unor contracte de proiectare la nivelul carora sa fi desfasurat respectivele activitati, privind elaborarea si/sau actualizarea si/sau revizuirea de proiecte tehnice pentru constructii noi / modernizare / reabilitare / extindere aferente constructiilor civile,se va puncta astfel:\n- pentru 2-3 proiecte/contracte la care a participat - 2 puncte\n- pentru 4-5 proiecte/contracte la care a participat- 5 puncte\n- peste 5 proiecte/contracte la care a participat- 10 puncte',
                                                                                                            'isElectronicCriteria': None,
                                                                                                            'isPriceCriteria': None,
                                                                                                            'isFrameworkAgreementCriteria': None,
                                                                                                            'directProportional': None,
                                                                                                            'sysAwardCriteriaTypeId': None},
                                                                                                           {'noticeAwardCriteriaID': 100280418,
                                                                                                            'noticeAwardCriteriaName': '3. Arhitect',
                                                                                                            'noticeAwardCriteriaDescription': 'Arhitect: participarea expertului propus in calitate de Arhitect in cadrul unor contracte de proiectare la nivelul carora sa fi desfasurat respectivele activitati, privind elaborarea si/sau actualizarea si/sau revizuirea de proiecte tehnice pentru constructii noi / modernizare / reabilitare / extindere aferente constructiilor civile.',
                                                                                                            'noticeAwardCriteriaWeight': 10.0,
                                                                                                            'noticeAwardCriteriaOrder': 4,
                                                                                                            'algorithmDescription': 'Arhitect: participarea expertului propus in calitate de Arhitect in cadrul unor contracte de proiectare la nivelul carora sa fi desfasurat respectivele activitati, privind elaborarea si/sau actualizarea si/sau revizuirea de proiecte tehnice pentru constructii noi / modernizare / reabilitare / extindere aferente constructiilor civile,se va puncta astfel:\n- pentru 2-3 proiecte/contracte la care a participat - 2 puncte\n- pentru 4-5 proiecte/contracte la care a participat- 5 puncte\n- peste 5 proiecte/contracte la care a participat- 10 puncte',
                                                                                                            'isElectronicCriteria': None,
                                                                                                            'isPriceCriteria': None,
                                                                                                            'isFrameworkAgreementCriteria': None,
                                                                                                            'directProportional': None,
                                                                                                            'sysAwardCriteriaTypeId': None}],
                                                                               'hasOptions': False,
                                                                               'optionsDescription': None,
                                                                               'isEUFunded': True,
                                                                               'euProject': 'POR/2018/8/8.1/8.1.A/1/7 regiuni - Ambulatorii\nAxa Prioritara - Dezvoltarea infrastructurii de sanatate si sociale\nOperatiunea - 8.1.A : Ambulatorii',
                                                                               'supplementaryInformation': None,
                                                                               'monthDuration': 26,
                                                                               'dayDuration': None,
                                                                               'startDate': None,
                                                                               'completionDate': None,
                                                                               'showSysAwardCriteriaType': True,
                                                                               'sysAwardCriteriaTypeId': 2,
                                                                               'sysAwardCriteriaType': {'id': 2,
                                                                                                        'text': 'Cel mai bun raport calitate – pret',
                                                                                                        'localeKey': None},
                                                                               'sysEuropeanFundId': None,
                                                                               'sysEuropeanFund': {'id': 3,
                                                                                                   'text': 'Programul Operational Regional - POR',
                                                                                                   'localeKey': None},
                                                                               'sysFinancingTypeId': None,
                                                                               'sysFinancingType': {'id': 4,
                                                                                                    'text': 'Program / Proiect',
                                                                                                    'localeKey': None},
                                                                               'communityProgramReference': 'POR/2018/8/8.1/8.1.A/1/7 regiuni - Ambulatorii\nAxa Prioritara - Dezvoltarea infrastructurii de sanatate si sociale\nOperatiunea - 8.1.A : Ambulatorii',
                                                                               'estimatedValue': None,
                                                                               'minEstimatedValue': None,
                                                                               'maxEstimatedValue': None,
                                                                               'currency': None,
                                                                               'lotInfo': None}],
                                                          'canEdit': False,
                                                          'caNoticeId': 100157051,
                                                          'sectionName': None,
                                                          'sectionCode': None,
                                                          'noticePreviousPublication': None}},

I tried something like this for another JSON format

def parser(data):
    d = json.loads(data)

    if ('Eroare de sistem' in data) & ('Object reference not set' in data):
        return None

    else:
        return json_normalize(d,
                              record_path='directAcquisitionItems',
                              meta=format,
                              errors='ignore',
                              meta_prefix='main_'
                              record_prefix='lot_'
                              )

resulting in small dataframe objects that I can write into a CSV, but the process is very slow.

2
  • Have you tried with a dictionary, like this? stackoverflow.com/questions/45150617/… Commented Sep 1, 2020 at 13:47
  • I just ended up storing into sql table the id and the json str outputted by request's response. I will look deeper into that method, thanks. Commented Sep 1, 2020 at 13:54

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.