Saltar al contenido
🛠️ToolsShed

JSON a Go Struct

Convierte datos JSON a tipos de struct de Go con etiquetas de campo.

Acerca de esta herramienta

JSON to Go Struct es una utilidad para desarrolladores que convierte automáticamente datos JSON en definiciones de estructuras Go fuertemente tipadas. Esta herramienta es esencial para programadores de Go que trabajan con APIs JSON, archivos de configuración o formatos de intercambio de datos, eliminando el tedioso proceso manual de definir campos de estructura y sus etiquetas JSON correspondientes.

Simplemente pega tus datos JSON en la herramienta y genera al instante código de estructura Go con tipos de campo, nombres y etiquetas de estructura apropiadas (incluyendo json, omitempty y otras etiquetas comunes). Las estructuras generadas preservan la estructura JSON original mientras se aplica la seguridad de tipos de Go, facilitando el análisis de respuestas JSON directamente en estructuras de datos tipadas.

Esta herramienta es particularmente valiosa al integrar APIs externas o consumir datos JSON de terceros donde el esquema es complejo o profundamente anidado. Admite campos opcionales, matrices, objetos anidados y tipos de datos especiales, ahorrando a los desarrolladores tiempo significativo durante la integración de API y reduciendo el riesgo de errores en tiempo de ejecución causados por discrepancias de tipo.

Preguntas Frecuentes

Implementación de Código

import json

def to_pascal_case(s: str) -> str:
    return ''.join(word.capitalize() for word in s.replace('-', '_').split('_'))

def json_to_go_type(value, field_name: str, structs: dict) -> str:
    if value is None:
        return "interface{}"
    if isinstance(value, bool):
        return "bool"
    if isinstance(value, int):
        return "int64"
    if isinstance(value, float):
        return "float64"
    if isinstance(value, str):
        return "string"
    if isinstance(value, list):
        if not value:
            return "[]interface{}"
        elem_type = json_to_go_type(value[0], field_name, structs)
        return f"[]{elem_type}"
    if isinstance(value, dict):
        struct_name = to_pascal_case(field_name)
        fields = []
        for k, v in value.items():
            field_type = json_to_go_type(v, k, structs)
            go_name = to_pascal_case(k)
            fields.append(f'\t{go_name} {field_type} `json:"{k}"`')
        structs[struct_name] = "type " + struct_name + " struct {\n" + "\n".join(fields) + "\n}"
        return struct_name
    return "interface{}"

def json_to_go(json_str: str, root_name: str = "Root") -> str:
    data = json.loads(json_str)
    structs = {}
    json_to_go_type(data, root_name, structs)
    return "\n\n".join(structs.values())

sample = '{"name": "Alice", "age": 30, "address": {"city": "Tokyo", "zip": "100-0001"}}'
print(json_to_go(sample))

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.