testCharts / app.py
farukkr's picture
Update app.py
d0a2dc2 verified
import streamlit as st
from graphviz import Digraph
import json
def create_graph_from_json_text(json_text, graph=None, parent_node=None):
# Convert JSON text to a Python dictionary
json_data = json.loads(json_text)
# Create a new Digraph if not provided
if graph is None:
graph = Digraph()
if isinstance(json_data, dict):
for key, value in json_data.items():
if isinstance(value, dict) or isinstance(value, list):
node_id = f"{parent_node}.{key}" if parent_node else key
graph.node(node_id, label=key)
if parent_node is not None:
graph.edge(parent_node, node_id)
create_graph_from_json_text(json.dumps(value), graph, node_id)
else:
node_id = f"{parent_node}.{key}" if parent_node else key
graph.node(node_id, label=f"{key}: {value}")
if parent_node is not None:
graph.edge(parent_node, node_id)
elif isinstance(json_data, list):
for index, item in enumerate(json_data):
node_id = f"{parent_node}[{index}]" if parent_node else f"[{index}]"
graph.node(node_id, label=f"[{index}]")
if parent_node is not None:
graph.edge(parent_node, node_id)
create_graph_from_json_text(json.dumps(item), graph, node_id)
return graph
def main():
st.title("Graph Visualization with Graphviz and Streamlit")
# JSON text in Streamlit
json_text = """
{
"id": "urn:example:aas:asset1",
"administration": {
"version": "2.1",
"revision": "A",
"validUntil": "2050-12-31T23:59:59Z"
},
"canonicalModel": {
"id": "urn:example:model:asset1",
"version": "1.0"
},
"submodels": [
{
"id": "urn:example:submodel:1",
"elements": [
{
"id": "property1",
"propertyType": "string",
"value": "Value 1"
},
{
"id": "property2",
"propertyType": "integer",
"value": 25
}
]
}
]
}
"""
# Create the diagram from the JSON text
graph = create_graph_from_json_text(json_text)
# Display the diagram in Streamlit
st.graphviz_chart(graph.source)
if __name__ == "__main__":
main()