Skip to content

Instantly share code, notes, and snippets.

@BiTree
Created August 25, 2021 05:16
Show Gist options
  • Save BiTree/3f447469552773c5dcc10a8246a86b50 to your computer and use it in GitHub Desktop.
Save BiTree/3f447469552773c5dcc10a8246a86b50 to your computer and use it in GitHub Desktop.
convert java property file to json
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