İçeriğe geç
🛠️ToolsShed

JSON'dan Go Struct'a

JSON verilerini alan etiketleriyle birlikte Go struct türlerine dönüştürür.

Bu araç hakkında

JSON to Go Struct, JSON verilerini güçlü bir şekilde yazılan Go yapı tanımlarına otomatik olarak dönüştüren bir geliştirici aracıdır. Bu araç, JSON API'leri, yapılandırma dosyalarını veya veri alışveriş formatlarıyla çalışan Go programcıları için gereklidir ve yapı alanlarını ve karşılık gelen JSON etiketlerini elle tanımlamanın sıkıcı sürecini ortadan kaldırır.

JSON verilerinizi araca yapıştırmanız yeterli, araç anında uygun alan türlerine, adlara ve yapı etiketlerine (json, omitempty ve diğer yaygın etiketler dahil) sahip Go yapı kodu oluşturur. Oluşturulan yapılar, Go'nun tür güvenliğini uygularken orijinal JSON yapısını koruyarak, JSON yanıtlarının doğrudan yazılan veri yapılarına ayrıştırılmasını kolaylaştırır.

Bu araç, harici API'leri entegre ederken veya şeması karmaşık veya derinlemesine iç içe olan üçüncü taraf JSON verilerini tüketirken özellikle değerlidir. İsteğe bağlı alanları, dizileri, iç içe nesneleri ve özel veri türlerini destekleyerek, geliştiricilere API entegrasyonu sırasında önemli ölçüde zaman kazandırır ve tür uyuşmazlıklarından kaynaklanan çalışma zamanı hatalarının riskini azaltır.

Sıkça Sorulan Sorular

Kod Uygulaması

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.