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)) | |