-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparse_json_objs.py
More file actions
60 lines (53 loc) · 2.2 KB
/
parse_json_objs.py
File metadata and controls
60 lines (53 loc) · 2.2 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
def convert_json_map(json_obj):
result = {}
table = None
if json_obj is None:
return None
if 'org/json/JSONObject' in json_obj.oop_field_values_by_name and 'map' in json_obj.oop_field_values_by_name['org/json/JSONObject']:
m = json_obj.oop_field_values_by_name['org/json/JSONObject']['map']
if m is None:
return None
table = m.oop_field_values_by_name['java/util/HashMap']['table']
if table is None:
return None
for node in table.oop_values:
if node is None:
continue
key = node.get_oop_field_value('key')
value = node.oop_field_values_by_name['java/util/HashMap$Node']['value']
result[key] = convert_json_obj(value)
return result
def convert_json_obj(json_obj):
if json_obj is None:
return None
if 'org/json/JSONObject' in json_obj.oop_field_values_by_name and\
'map' in json_obj.oop_field_values_by_name['org/json/JSONObject']:
return convert_json_map(json_obj)
elif 'org/json/JSONArray' in json_obj.oop_field_values_by_name and \
'myArrayList' in json_obj.oop_field_values_by_name['org/json/JSONArray']:
return convert_json_array(json_obj)
else:
try:
return json_obj.get_oop_field_value('value')
except:
print ("Failed to convert Json value")
return None
def convert_json_array(json_obj):
if json_obj is None:
return None
result = []
alist = None
if 'org/json/JSONArray' in json_obj.oop_field_values_by_name and \
'myArrayList' in json_obj.oop_field_values_by_name['org/json/JSONArray']:
_list = json_obj.oop_field_values_by_name['org/json/JSONArray']['myArrayList']
if _list is None:
return None
elif not 'java/util/ArrayList' in _list.oop_field_values_by_name or \
not 'elementData' in _list.oop_field_values_by_name['java/util/ArrayList']:
return None
alist = _list.oop_field_values_by_name['java/util/ArrayList']['elementData']
for node in alist.oop_values:
if node is None:
continue
result.append(convert_json_obj(node))
return result