Skip to content

Instantly share code, notes, and snippets.

@ynsta
Last active September 25, 2017 22:03
Show Gist options
  • Save ynsta/7221512c583fbfbafe6d to your computer and use it in GitHub Desktop.
Save ynsta/7221512c583fbfbafe6d to your computer and use it in GitHub Desktop.
Steam vdf/json converters
#!/usr/bin/env python
import json
def json2vdf(stream):
"""
Read a json file and return a string in Steam vdf format
"""
def _istr(ident, string):
return (ident * '\t') + string
data = json.loads(stream.read(), object_pairs_hook=list)
def _json2vdf(data, indent):
out = ''
for k, v in data:
if isinstance(v, list):
if indent:
out += '\n'
out += _istr(indent, '"{}"\n'.format(k))
out += _istr(indent, '{\n')
out += _json2vdf(v, indent + 1)
out += _istr(indent, '}\n')
else:
out += _istr(indent,'"{}" "{}"\n'.format(k, v))
return out
return _json2vdf(data, 0)
def main():
"""
Read json and write Steam vdf conversion
"""
import sys
import argparse
parser = argparse.ArgumentParser(prog='json2vdf', description=main.__doc__)
parser.add_argument('-i', '--input',
default=sys.stdin,
type=argparse.FileType('r'),
help='input json file (stdin if not specified)')
parser.add_argument('-o', '--output',
default=sys.stdout,
type=argparse.FileType('w'),
help='output vdf file (stdout if not specified)')
args = parser.parse_args()
args.output.write(json2vdf(args.input))
if __name__ == '__main__':
main()
#!/usr/bin/env python
from shlex import shlex
def vdf2json(stream):
"""
Read a Steam vdf file and return a string in json format
"""
def _istr(ident, string):
return (ident * ' ') + string
jbuf = '{\n'
lex = shlex(stream)
indent = 1
while True:
tok = lex.get_token()
if not tok:
return jbuf + '}\n'
if tok == '}':
indent -= 1
jbuf += _istr(indent, '}')
ntok = lex.get_token()
lex.push_token(ntok)
if ntok and ntok != '}':
jbuf += ','
jbuf += '\n'
else:
ntok = lex.get_token()
if ntok == '{':
jbuf += _istr(indent, tok + ': {\n')
indent += 1
else:
jbuf += _istr(indent, tok + ': ' + ntok)
ntok = lex.get_token()
lex.push_token(ntok)
if ntok != '}':
jbuf += ','
jbuf += '\n'
def main():
"""
Read Steam vdf and write json compatible conversion
"""
import sys
import argparse
parser = argparse.ArgumentParser(prog='vdf2json', description=main.__doc__)
parser.add_argument('-i', '--input',
default=sys.stdin,
type=argparse.FileType('r'),
help='input vdf file (stdin if not specified)')
parser.add_argument('-o', '--output',
default=sys.stdout,
type=argparse.FileType('w'),
help='output json file (stdout if not specified)')
args = parser.parse_args()
args.output.write(vdf2json(args.input))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment