Skip to content

Instantly share code, notes, and snippets.

@kirillzhosul
Last active April 22, 2022 17:54
Show Gist options
  • Save kirillzhosul/901b64346f54dc820d6ee3c9e553fdc3 to your computer and use it in GitHub Desktop.
Save kirillzhosul/901b64346f54dc820d6ee3c9e553fdc3 to your computer and use it in GitHub Desktop.
JSON to HTML python script.
from typing import Dict, List, Optional, Union
class HTMLTag:
def __init__(self, name: str, data: Union[List["HTMLTag"], any], params: Optional[Dict] = None):
self.name = name
self.data = data
self.params = params
def __str_params(self):
string = "" if self.params is None else " "
if string:
for name, value in self.params.items():
string += f"{name}=\"{value}\""
return string
def __str__(self) -> str:
params = self.__str_params()
if isinstance(self.data, list):
string = f"<{self.name}{params}>\n"
for children in self.data:
string += str(children)
string += f"</{self.name}>\n"
return string
return f"<{self.name}{params}>{self.data}</{self.name}>\n"
def __parse_tag(tag: Dict) -> List:
data = []
for _name, _data in tag.items():
if isinstance(_data, dict):
parsed_tag = HTMLTag(_name, __parse_tag(_data))
elif isinstance(_data, str):
parsed_tag = HTMLTag(_name, _data)
else:
parsed_params, parsed_container = _data[0], _data[1]
if isinstance(parsed_container, Dict): # !str
parsed_container = __parse_tag(parsed_container)
parsed_tag = HTMLTag(_name, parsed_container, parsed_params)
data.append(parsed_tag)
return data
def convert(json: Dict) -> str:
data = __parse_tag(json)
return "".join([str(tag) for tag in data])
# SAMPLE JSON for json2html.convert()
#{
# "html": [{"lang": "en"}, {
# "head": {
# "title": "Hello world!"
# },
# "body": {
# "h1": [{"style": "color: red;"}, "Hello world from HTML+CSS!"],
# "script": [{"type": "text/javascript"}, "alert('Hello world from JS!')"]
# }
# }]
#}
# CLI use.
#import sys
#import json
#import json2html
#def cli(argc, argv):
# if argc <= 2:
# return print("Please enter both input and output filepaths!")
# path_input, path_output = argv[1], argv[2]
# with open(path_input, "r") as input_fp:
# input_json = json.load(input_fp)
# output_html = json2html.convert(input_json)
# with open(path_output, "w") as output_fp:
# output_fp.write(output_html)
# return print("Completed!")
#
#if __name__ == "__main__":
# cli(len(sys.argv), sys.argv)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment