File: parseJson.py

package info (click to toggle)
warzone2100 4.6.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 660,320 kB
  • sloc: cpp: 676,209; ansic: 391,201; javascript: 78,238; python: 16,632; php: 4,294; sh: 4,094; makefile: 2,629; lisp: 1,492; cs: 489; xml: 404; perl: 224; ruby: 156; java: 89
file content (37 lines) | stat: -rw-r--r-- 1,443 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import json, sys, re

IGNORED_WZ_JSON_FILE_TYPES = {'wz2100.proxmsgs.v1', 'wz2100.briefs.v1'}

def printString(s, begin, end, filename, jsonPath):
	if not re.match(r'^(\*.*\*|CAM[0-9] .*|Z ?NULL.*)$', s):
		sys.stdout.write('{}{}) // SRC: {}: {}{}'.format(begin, json.dumps(s, ensure_ascii=False), filename, jsonPath, end))

def parse(obj, filename):
	def _parse(obj, filename, jsonPath="$"):
		if isinstance(obj, dict):
			for k, v in obj.items():
				_parse(v, filename, jsonPath + "." + k)
				if k in ['name', 'category', 'tip', 'easy_tip', 'medium_tip', 'hard_tip', 'insane_tip'] and isinstance(v, str):
					printString(v, '_(', '\n', filename, jsonPath + "." + k)
				elif k in ['text', 'ranks'] and isinstance(v, list):
					for idx, s in enumerate(v):
						itemPath = jsonPath + "." + k + "[" + str(idx) + "]"
						if isinstance(s, str):
							if k == 'text':
								printString(s, '_(', '\n', filename, itemPath)
							elif k == 'ranks':
								printString(s, 'NP_("rank", ', '\n', filename, itemPath)
		elif isinstance(obj, list):
			for idx, v in enumerate(obj):
				_parse(v, filename, jsonPath + "[" + str(idx) + "]")
	
	if isinstance(obj, dict):
		# check for json format types that should be ignored
		if 'type' in obj:
			if obj['type'] in IGNORED_WZ_JSON_FILE_TYPES:
				#sys.stderr.write('// IGNORING: {}\n'.format(filename))
				return
	
	_parse(obj, filename);

parse(json.load(open(sys.argv[1], 'r')), sys.argv[1])