Spaces:
Sleeping
Sleeping
| import json | |
| # Transform value in metadata | |
| 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 | |
| # Some example JSON inputs for testing | |
| 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": []}, | |
| } | |
| # Another test | |
| 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 | |
| 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)) | |