import json def transform_value(key, value): if isinstance(value, dict): if 'Value' in value and 'Unit' in value: value_type = "str" if isinstance(value['Value'], str) else "float" return { "key": key, "type": "dict", "value": [ {"key": "Value", "type": value_type, "value": value['Value']}, {"key": "Unit", "type": "str", "value": value['Unit']} ] } else: return { "key": key, "type": "dict", "value": [transform_value(k, v) for k, v in value.items()] } elif isinstance(value, list): return { "key": key, "type": "list", "value": [transform_value("", item) for item in value] } elif isinstance(value, str): return { "key": key, "type": "str", "value": value } else: raise ValueError(f"Unsupported value type: {type(value)}") def my_json_to_kadi(data): return [transform_value(key, value) for key, value in data.items()] # Print the output JSON in a formatted way # Example JSON input input_json = { "Material": { "Name": "LLTO", "Composition": "(Li,La)TiO-type", "Type": "Perovskite-type", "Properties": { "Ionic Conductivity": {"Value": "10^-3", "Unit": "S cm^-1"}, "Chemical Stability": "", "Dendrite Formation Risk": "", "Operating Voltage": "", "Flexibility": "", "Processing": "" } }, "Performance": { "Specific Capacity": {"Value": "", "Unit": ""}, "Energy Density": {"Value": "", "Unit": ""}, "Capacity Retention": "", "Operating Temperature": {"Value": "Room temperature", "Unit": ""} }, "Usage": { "Battery Type": "", "Benefits": [] } } # input_json = { # "Doctor_Patient_Discussion": { # "Initial_Observation": { # "Symptoms": [ # "pale", # "sore throat", # "running a temperature" # ], # "Initial_Assessment": "You\u2019ve moderate fever." # }, # "Medical_Examination": { # "Temperature": "99.8", # "Blood_Pressure": "fine", # "Doctor_Assessment": "few symptoms of malaria", # "Diagnosis": "few symptoms of malaria" # }, # "Treatment_Plan": { # "Prescription": [ # "three medicines", # "a syrup" # ] # } # } # } # input_json = { # "Doctor_Patient_Discussion": { # "Initial_Observation": { # "Symptoms": [ # "pale", # "sore throat", # "running a temperature" # ], # "Initial_Assessment": "You\u2019ve moderate fever." # }, # "Medical_Examination": { # "Temperature": "99.8", # "Blood_Pressure": "fine", # "Doctor_Assessment": "few symptoms of malaria", # "Diagnosis": "few symptoms of malaria" # }, # "Treatment_Plan": { # "Prescription": [ # "three medicines", # "a syrup" # ] # } # } # } input_json = { "Experiment": { "Material": "LATP powders", "SynthesisRoute": "modified sol-gel synthesis route described by (Bucharsky et al., 2015)", "Precursors": [ { "Name": "lithium acetate Li(C2H3O2) ⋅2H2O", "Purity": "purity ≥ 99 %", "Supplier": "Alfa Aesar GmbH & Co KG", "Location": "Germany" }, { "Name": "aluminum nitrate Al(NO3)3 ⋅9H2O", "Purity": "purity ≥ 98.5 %", "Supplier": "Merck KGaA", "Location": "Germany" }, { "Name": "titanium-isopropoxide Ti[OCH(CH3)2]4", "Purity": "purity ≥ 98 %", "Supplier": "Merck KGaA", "Location": "Germany" } ], "Procedure": [ { "Step": "Dissolve lithium acetate and aluminum nitrate in distilled water under constant stirring." }, { "Step": "Add titanium-isopropoxide dropwise to the solution." }, { "Step": "Add phosphoric acid slowly through a drip funnel to form a gel." }, { "Step": "Dry the gel at room temperature for 24 h." } ], "HeatTreatment": [ { "Step": "First, heat treat samples at 400°C for 6 h to achieve precursor formation and eliminate reaction gases." }, { "Step": "Second, process samples at 900°C for 8 h to complete the reaction to crystalline LATP." } ], "BatchVariations": [ { "Description": "Prepare one batch with all precursors in stoichiometric quantities (marked as 0.0 wt%)." }, { "Description": "Explore different batches with either an excess up to +7.5 wt% or a deficiency up to -15.0 wt% of phosphoric acid compared to the stoichiometric composition." } ], "Processing": [ { "Step": "Process the obtained powders in a planetary ball mill." }, { "Step": "Form pellets by uniaxial pressing and then further densify by cold isostatic pressing at 400 MPa." }, { "Step": "All pressed samples have a green density of approximately 62% relative density." } ], "Sintering": { "TemperatureRange": "850 to 1,050°C", "IsothermalSinteringTime": "30 to 540 min", "Cooling": "Cool down to room temperature in furnace", "DensityDetermination": "Determine densities by Archimedes’ method" }, "IonicConductivityMeasurements": { "Method": "Impedance analysis", "Conditions": "At room temperature over the frequency range from 0.1 Hz to 1 MHz with an AC amplitude of 50 mV in the frequency response analyzer (AMTEK GmbH, VersaSTAT 4, Pennsylvania, United States)", "Reference": "For further details of the experimental part please refer to our previous work (Schiffmann et al., 2021)" } } } if __name__ == "__main__": # Transform the input JSON # output_json = transform_json2kadi(input_json) from kadi_apy.lib.conversion import json_to_kadi output_json = json_to_kadi(input_json) # Print the output JSON print(json.dumps(output_json, indent=2))