Last active
April 22, 2022 17:54
-
-
Save kirillzhosul/901b64346f54dc820d6ee3c9e553fdc3 to your computer and use it in GitHub Desktop.
JSON to HTML python script.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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