Created
August 25, 2021 05:16
-
-
Save BiTree/3f447469552773c5dcc10a8246a86b50 to your computer and use it in GitHub Desktop.
convert java property file to json
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
import re | |
import json | |
ori = """{'java.class.version': '60.0', | |
'java.home': '/usr/lib/jvm/java-16-openjdk', | |
'java.runtime.name': 'OpenJDK Runtime Environment', | |
'java.runtime.version': '16.0.2+7', | |
'java.specification.name': 'Java Platform API Specification', | |
'java.specification.vendor': 'Oracle Corporation', | |
'java.specification.version': '16', | |
'java.vendor.url.bug.b': 'https://bugreport.java.com/bugreport/', | |
'java.version.date': '2021-07-20', | |
'java.vm.name': 'OpenJDK 64-Bit Server VM', | |
'java.vm.specification.name': 'Java Virtual Machine Specification', | |
'java.vm.specification.vendor': 'Oracle Corporation', | |
'java.vm.specification.version': '16', | |
'java.vm.vendor': 'Oracle Corporation', | |
'java.vm.version': '16.0.2+7', | |
'sun.arch.data.model': '64'}""" | |
prop_regex = re.compile("'(?P<key>.*)':\s*'(?P<value>.*)'\s*") | |
def dict_filter(dic: dict, _str: str) -> dict: | |
ret_dict = dict() | |
for k in dic.keys(): | |
if k != _str: | |
ret_dict[k] = dic[k] | |
return ret_dict | |
def get_deepest_dict(dic: dict, keys: list) -> dict: | |
_dic = dict() | |
_dic = dic | |
for i in keys: | |
_dic = _dic[i] | |
return _dic | |
def prop2json_converter(src_str: str) -> str: | |
""" | |
Convert property string to json string. | |
:param src_str: source property string | |
:return: a wrapped json string | |
""" | |
try: | |
_dict = dict() | |
ret_dict = dict() | |
for ln in src_str.split("\n"): | |
matched_k_v = prop_regex.search(ln) | |
if matched_k_v: | |
_dict[matched_k_v.groupdict().get("key")] = matched_k_v.groupdict().get("value") | |
for k, v in _dict.items(): | |
for cnt, kk in enumerate(k.split(".")): | |
_l = k.split(".")[:cnt] | |
if cnt != len(k.split(".")) - 1: | |
if not _l: | |
ret_dict.setdefault(kk, dict()) | |
else: | |
_r = get_deepest_dict(ret_dict, _l) | |
_r.setdefault(kk, dict()) | |
else: | |
if not _l: | |
ret_dict.setdefault(kk, v) | |
else: | |
_r = get_deepest_dict(ret_dict, _l) | |
_r[kk] = v | |
except (TypeError, AttributeError): | |
return json.dumps({"data": None, "err": "Invalid input string"}, ensure_ascii=False, indent=4) | |
return json.dumps({"data": ret_dict, "err": ""}, ensure_ascii=False, indent=4) | |
if __name__ == '__main__': | |
print(prop2json_converter(ori)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment