#!/usr/bin/env python2.7 | |
# -*- coding: utf-8 -*- | |
import argparse | |
import codecs | |
import json | |
__author__ = 'Daniel Widerin <daniel@widerin.net>' | |
__license__ = 'MIT' | |
class HierarchicalDict(dict): | |
def __init__(self, *args, **kwargs): | |
self.update(*args, **kwargs) | |
def __setitem__(self, key, val): | |
dict.__setitem__(self, key, val) | |
def update(self, *args, **kwargs): | |
for key, val in dict(*args, **kwargs).items(): | |
keys = key.split('.') | |
if len(keys) > 1: | |
self._decode(keys, val) | |
else: | |
self[key] = val | |
def _decode(self, keys, value): | |
storage = self | |
for key0 in keys[:-1]: | |
if key not in storage: | |
storage[key] = {} | |
storage = storage[key] | |
storage[keys[-1]] = value | |
def main(): | |
parser = argparse.ArgumentParser( | |
description='Recover flattened json file.') | |
parser.add_argument( | |
'files', metavar='FILE', type=str, nargs='+', | |
help='Files to process') | |
parser.add_argument( | |
'--indent', default=4, type=int, dest='indent', | |
help='json indentation for outfile') | |
args = parser.parse_args() | |
for filename in args.files: | |
try: | |
raw = codecs.open(filename, 'r', encoding='utf-8').read() | |
data = json.loads(raw, object_pairs_hook=HierarchicalDict) | |
with codecs.open(filename, 'w', encoding='utf-8') as outfile: | |
json.dump(data, outfile, | |
sort_keys=True, | |
indent=args.indent, | |
ensure_ascii=False) | |
except Exception as ex: | |
print('Error processing {0:s}'.format(filename), ex) | |
if __name__ == '__main__': | |
main() |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
Show comment Hide comment
I wrote a blog post how to use this: http://widerin.net/blog/weblate-i18next-json-parser/ |
Rolinh
commented
Oct 21, 2016
Thanks for this script! What about changing this line: #!/usr/bin/env python2.7 into #!/usr/bin/env python And using 2to3 to make it possible to run it on either version of python? |
@Rolinh should work fine on python3 |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
Show comment Hide comment
cescp
commented
Jun 21, 2017
Thanks for the script! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I wrote a blog post how to use this: http://widerin.net/blog/weblate-i18next-json-parser/