企评社

Las etiquetas de la interfaz están en Español. Las reseñas de empresas, los mensajes del foro y las descripciones de las herramientas solo están disponibles en chino por ahora.

JSON a clase entidad

Pega JSON e infiere tipos automáticamente · genera código Java / TypeScript / Python / Go / C# / PHP

全部在浏览器本地转换,数据不上传、刷新即清空

JSON 输入

对象或对象数组
示例:

生成选项

生成结果


        

类型是怎么推断的

JSON 本身不带类型信息,工具按下面的规则读一遍你的数据(**规则就是这些,没有隐藏逻辑**):

JSON 里的值 Java TypeScript Python Go
整数且在 int 范围内Integernumberintint
整数但超出 int(±2147483648)Longnumberintint64
小数 / 科学计数法Doublenumberfloatfloat64
true / falseBooleanbooleanboolbool
字符串Stringstringstrstring
null(这一处是 null)ObjectanyAnyinterface{}
空数组 []List<Object>any[]List[Any][]interface{}
数组List<元素类型>元素类型[]List[元素类型][]元素类型
嵌套对象静态内部类嵌套 interface独立 dataclass独立 struct

类型冲突与缺失怎么处理(不静默选一个):

  • 同一字段在不同数组元素里类型不同(例如一处是数字、一处是字符串):按"无法确定"处理,生成 Object / any,并在结果上方的提示里点名是哪个字段、出现了哪几种类型,由你决定改成什么。
  • null:无法从 null 推断类型,单独出现时给 Object / any;与其它类型同时出现时按另一边的类型生成,并在注释里标注"可能为 null"。
  • 空数组:不知道元素类型,给 List<Object> / any[] 并提示。
  • 某字段只在部分元素里出现:TypeScript 标为可选(name?:),Java / C# / Go 在注释或 tag 里标注(Java 用 Integer 这类包装类型天然可空)。
  • JSON 里的字段名不是合法标识符或撞上语言关键字(user-name、class、1st、中文名):会改写成合法标识符,并尽最大可能保留原始 key——Java 用 @JsonProperty、C# 用 [JsonPropertyName]、Go 的 json:"…" tag 一定带、Python 用 field(metadata={"json": …})、TypeScript 干脆直接用原始 key 当属性名(带引号),因为 TS 没有注解机制、属性名就是运行时字段名。
  • 改名后的映射代价(如实说明):Java / C# / Go 靠注解或 tag 自动映射,无需手工处理;TypeScript 用原始 key 所以天然正确;Python 的 metadata 只有 dataclasses-json / pydantic 这类库会读,直接 Root(**json.loads(x)) 遇到改名属性会报错;PHP 的 json_decode 按属性名严格映射,改名属性旁边会写 /** 对应 JSON 字段: … */ 注释,序列化/反序列化时请据此手工处理(或改用数组访问)。
  • 数字精度:超过 ±2^53 的整数在 JS 里已经没有精度,工具会提示你改用字符串(生成 String),不要用 Long 去接一个已经失真的值。
  • 类名撞上语言内置类型名(例如字段叫 list 派生出的类名 List,会遮蔽 Java 的 java.util.List / C# 的 System.Collections.Generic.List,直接编译不过):会自动加 Model 后缀(List → ListModel),同名字段仍然照常生成。

生成的代码是起点不是终点:Java 用 Lombok 还是手写 getter/setter、是否加 @JsonIgnoreProperties(ignoreUnknown = true)、日期字段用 String 还是 LocalDateTime,都请按你项目的规范微调。本工具不联网、不读取你项目的任何配置。

Preguntas frecuentes

¿Los tipos generados son fiables? ¿Y los null y arrays vacíos?

JSON no lleva información de tipos, así que la herramienta solo puede inferir de los valores reales de su dato. Un null solo no se puede inferir: sale Object / any; un array vacío no tiene tipo de elemento: sale List<Object> / any[]; si un campo cambia de tipo entre elementos del array, se genera Object / any como «no determinable» y el aviso de arriba dice qué campo y qué tipos aparecieron. La herramienta no adivina ni elige por usted en silencio: esos son campos para que usted confirme.

¿Qué sale con nombres como user-name, class, 1st o en chino?

Se aplican las reglas de cada lenguaje conservando el nombre original lo posible: Java reescribe a userName / class_ / _1stLogin más @JsonProperty("user-name"); C# añade [JsonPropertyName]; Go lleva siempre la etiqueta json:"user-name"; Python usa un nombre legal como class_ más field(metadata={"json": "user-name"}); TypeScript es lo más directo: la propiedad se escribe "user-name": string (TS no tiene mecanismo de anotación; el nombre de propiedad ES el nombre en tiempo de ejecución, y pasarlo a camelCase rompería la cuenta con JSON.parse). Las claves en chino se quedan tal cual (Java, Python y TypeScript aceptan identificadores chinos). Aviso justo: el metadata de Python solo lo leen bibliotecas como dataclasses-json / pydantic, y el json_decode de PHP mapea estricto por nombre de propiedad: en esos dos lenguajes, los campos renombrados hay que engancharlos a mano siguiendo los comentarios generados.

¿Cómo avisa si el JSON está mal escrito? ¿Localiza la línea?

Sí. La validación usa un analizador estricto propio, y los errores dan línea, columna y una nota en lenguaje claro (p. ej.: línea 3, columna 12: los nombres de propiedad van entre comillas dobles). Las trampas típicas tienen diagnóstico propio: cadenas con comilla simple, comentarios, comas finales, números con ceros a la izquierda, true/false/null mal escritos, paréntesis sin cerrar. El analizador además limita el anidamiento a 64 niveles y 20.000 nodos: si se pasa, lo dice claro en vez de colgar la página.

¿Qué lenguajes soportáis? ¿Se sube mi JSON?

Seis: Java (Lombok o getter/setter normales, @JsonProperty de Jackson opcional), interfaz TypeScript, dataclass de Python, struct de Go, class de C#, class de PHP. Nada se sube: analizar, inferir y generar ocurren en su navegador; el dato no sale de su máquina, recargar lo borra, y la página no tiene petición de subida alguna ni dependencia de terceros (sin CDN). Si su JSON trae nombres reales, teléfonos o documentos de identidad, la conversión local es precisamente para no mandarle esos datos a ningún servidor.

Herramientas relacionadas