Skip to content

JSON Format Support for GNDS Data in Fudge #17

@ahnaf-tahmid-chowdhury

Description

@ahnaf-tahmid-chowdhury

Question

I have been working with GNDS data and found the support for converting between ENDF and XML formats quite useful. However, I was wondering if there is any native support in Fudge for converting GNDS data to and from JSON format? JSON is a widely-used and convenient format for many applications, especially when integrating with other tools and pipelines.

Workaround

For now, I am using the following Python code to convert GNDS XML data to JSON format:

import xml.etree.ElementTree as ET
import json

def xml_to_dict(elem):
    d = {elem.tag: {} if elem.attrib else None}
    children = list(elem)
    if children:
        dd = {}
        for dc in map(xml_to_dict, children):
            for k, v in dc.items():
                if k in dd:
                    if not isinstance(dd[k], list):
                        dd[k] = [dd[k]]
                    dd[k].append(v)
                else:
                    dd[k] = v
        d = {elem.tag: dd}
    if elem.attrib:
        d[elem.tag].update(('@' + k, v) for k, v in elem.attrib.items())
    if elem.text:
        text = elem.text.strip()
        if children or elem.attrib:
            if text:
                d[elem.tag]['#text'] = text
        else:
            d[elem.tag] = text
    return d

def convert_gnds(xml_file, json_file):
    tree = ET.parse(xml_file)
    root = tree.getroot()
    gnds_dict = xml_to_dict(root)
    with open(json_file, 'w') as f:
        json.dump(gnds_dict, f, indent=2)

convert_gnds('gnds_data.xml', 'gnds_data.json')

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions