release commit
This commit is contained in:
43
graphCreation/create_graph.py
Normal file
43
graphCreation/create_graph.py
Normal file
@ -0,0 +1,43 @@
|
||||
import json
|
||||
import networkx as nx
|
||||
|
||||
def add_nodes_from_dict(graph, parent_node, current_dict):
|
||||
for key, value in current_dict.items():
|
||||
if isinstance(value, dict):
|
||||
# Create a new node for the nested dictionary
|
||||
new_node = f"{parent_node}.{key}"
|
||||
graph.add_node(new_node, label=key)
|
||||
# Add an edge from the parent node to the new node
|
||||
graph.add_edge(parent_node, new_node, edge_type=key)
|
||||
# Recurse into the nested dictionary
|
||||
add_nodes_from_dict(graph, new_node, value)
|
||||
elif isinstance(value, list):
|
||||
|
||||
# if list doesn't contain any nested dictionaries, make it a value in the node
|
||||
if any(isinstance(item, dict) for item in value)==False:
|
||||
graph.nodes[parent_node][key] = value
|
||||
|
||||
else:
|
||||
|
||||
# Process each dictionary in the list
|
||||
for index, item in enumerate(value):
|
||||
if isinstance(item, dict):
|
||||
if len(value)>1:
|
||||
item_node = f"{parent_node}.{key}[{index}]"
|
||||
else:
|
||||
item_node = f"{parent_node}.{key}"
|
||||
graph.add_node(item_node, label=key)
|
||||
graph.add_edge(parent_node, item_node, edge_type=key)
|
||||
add_nodes_from_dict(graph, item_node, item)
|
||||
|
||||
else:
|
||||
|
||||
# For non-dict and non-list values, add them as attributes to the parent node
|
||||
graph.nodes[parent_node][key] = value
|
||||
|
||||
def add_json_to_networkx(json_data, bundle_name, graph):
|
||||
if not isinstance(graph, nx.DiGraph):
|
||||
raise ValueError("The provided graph must be a networkx.DiGraph")
|
||||
root_node = bundle_name+'_bundle'
|
||||
graph.add_node(root_node, label='root')
|
||||
add_nodes_from_dict(graph, root_node, json_data)
|
Reference in New Issue
Block a user