KadiTextract / json2kadi.py
Kadi-IAM's picture
Update json2kadi.py
bc302f5 verified
raw
history blame
6.54 kB
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))