From 458da553870835aeb1237ed2a58ac4fa64715486 Mon Sep 17 00:00:00 2001 From: QingFeng <331052249@qq.com> Date: Wed, 3 Jul 2024 14:50:22 +0800 Subject: [PATCH] add new tools json-to-java entity --- src/tools/index.ts | 2 + src/tools/json-to-java/index.ts | 12 ++++ .../json-to-java/json-to-java.service.ts | 56 +++++++++++++++++++ src/tools/json-to-java/json-to-java.vue | 49 ++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 src/tools/json-to-java/index.ts create mode 100644 src/tools/json-to-java/json-to-java.service.ts create mode 100644 src/tools/json-to-java/json-to-java.vue diff --git a/src/tools/index.ts b/src/tools/index.ts index aa861c93..755f1976 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; +import { tool as jsonToJava } from './json-to-java'; import { tool as asciiTextDrawer } from './ascii-text-drawer'; @@ -104,6 +105,7 @@ export const toolsByCategory: ToolCategory[] = [ yamlToToml, jsonToYaml, jsonToToml, + jsonToJava, listConverter, tomlToJson, tomlToYaml, diff --git a/src/tools/json-to-java/index.ts b/src/tools/json-to-java/index.ts new file mode 100644 index 00000000..664f400d --- /dev/null +++ b/src/tools/json-to-java/index.ts @@ -0,0 +1,12 @@ +import { ArrowsShuffle } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'JSON to Java Entity', + path: '/json-to-java', + description: 'Convert JSON into Java entities', + keywords: ['json', 'to', 'java'], + component: () => import('./json-to-java.vue'), + icon: ArrowsShuffle, + createdAt: new Date('2024-07-03'), +}); diff --git a/src/tools/json-to-java/json-to-java.service.ts b/src/tools/json-to-java/json-to-java.service.ts new file mode 100644 index 00000000..c6c6169e --- /dev/null +++ b/src/tools/json-to-java/json-to-java.service.ts @@ -0,0 +1,56 @@ +const equivalence: { [key: string]: string } = { + number: 'Long', +}; + +export function convert(className: string, data: string | null) { + if (data === null) { + return ''; + } + if (typeof data === 'string') { + data = JSON.parse(data); + } + if (className === '') { + className = 'Result'; + } + const keys = Object.keys(data); + const objects: { [key: string]: any } = {}; + className = capitalizeFirstLetter(className); + let result = `public class ${className} {\n`; + for (const i in keys) { + const key = keys[i]; + const value = data[key]; + let type = typeof value as string; + if (Array.isArray(value)) { + const typeName = capitalizeFirstLetter(fixListClass(key)); + type = `List<${typeName}>`; + objects[typeName] = value[0]; + } + else if (type === 'object') { + type = capitalizeFirstLetter(key); + objects[type] = value; + } + else if (equivalence[type] !== undefined) { + type = equivalence[type]; + } + else { + type = capitalizeFirstLetter(type); + } + result += `\tpublic ${type} ${key};\n`; + } + result += '}\n'; + for (const clazzname in objects) { + result += convert(clazzname, objects[clazzname]); + } + return result; +} + +function fixListClass(string: string) { + if (string.endsWith('s')) { + return string.substring(0, string.length - 1); + } + return string; +} + +function capitalizeFirstLetter(string: string) { + return string.charAt(0).toUpperCase() + string.slice(1); +} diff --git a/src/tools/json-to-java/json-to-java.vue b/src/tools/json-to-java/json-to-java.vue new file mode 100644 index 00000000..32e5037b --- /dev/null +++ b/src/tools/json-to-java/json-to-java.vue @@ -0,0 +1,49 @@ + + +