Skip to content

Instantly share code, notes, and snippets.

@Yuiki
Last active September 26, 2017 18:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Yuiki/a68f5aa208101bb01e1a70954f4fb382 to your computer and use it in GitHub Desktop.
Save Yuiki/a68f5aa208101bb01e1a70954f4fb382 to your computer and use it in GitHub Desktop.
JSON形式のAPIレスポンスからJavaクラスを生成(書き殴り)
import json
class JavaClass:
def __init__(self, name):
self.name = name
self.fields = dict()
def add_field(self, java_type, name):
self.fields[name] = java_type
def __str__(self):
output = 'public class ' + self.name + ' {\n'
for idx, field_name in enumerate(self.fields):
java_type = self.fields[field_name]
output += ' @SerializedName("' + field_name + '")\n'
output += ' ' + java_type + ' ' + to_camel(field_name) + ';\n'
if idx != len(self.fields) - 1:
output += '\n'
output += '}'
return output
def to_camel(snake_str):
words = snake_str.split('_')
return words[0] + ''.join(word.title() for word in words[1:])
def gen_java_classes(class_name, classes, source):
java_class = JavaClass(class_name)
for idx, field_name in enumerate(source):
field_value = source.get(field_name)
python_type = type(field_value)
if python_type == str:
java_type = 'String'
elif python_type == int:
java_type = 'int'
elif python_type == bool:
java_type = 'boolean'
elif python_type == dict:
java_type = field_name.title()
gen_java_classes(field_name.title(), classes, field_value)
elif python_type == list:
java_type = 'List<' + field_name.title() + '>'
field_value = field_value[0]
gen_java_classes(field_name.title(), classes, field_value)
else:
java_type = 'Object'
java_class.add_field(java_type, field_name)
classes.append(java_class)
return classes
print('Enter outer class name')
outer_class_name = input()
print('Enter Json')
input_lines = list()
while True:
input_line = input()
if input_line:
input_lines.append(input_line)
else:
json_str = '\n'.join(input_lines)
break
json_dict = json.loads(json_str)
java_classes = gen_java_classes(outer_class_name, [], json_dict)
for item in java_classes:
print(str(item) + '\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment