Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Meratakan Struktur Tanpa Nama Terbenam dalam JSON dengan Go?

Bagaimana untuk Meratakan Struktur Tanpa Nama Terbenam dalam JSON dengan Go?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 01:00:29987semak imbas

How to Flatten Embedded Anonymous Structs in JSON with Go?

Meratakan Struktur Tanpa Nama Terbenam dalam JSON dengan Go

Dalam kod yang disediakan, fungsi MarshalHateoas cuba meratakan perwakilan JSON bagi struct oleh membenamkan struct tanpa nama sebagai ahli struct Hateoas. Walau bagaimanapun, medan ahli tanpa nama dianggap sebagai medan bernama berasingan, membawa kepada output JSON yang tidak diingini.

Untuk menyelesaikan isu ini, pakej reflect boleh dimanfaatkan untuk menggelungkan medan struct terbenam dan memetakannya secara manual kepada perwakilan yang diratakan. Berikut ialah versi MarshalHateoas yang diubah suai:

<code class="go">import (
    "encoding/json"
    "fmt"
    "reflect"
)

// ...

func MarshalHateoas(subject interface{}) ([]byte, error) {
    links := make(map[string]string)

    // Retrieve the unexported fields of the subject struct
    subjectValue := reflect.Indirect(reflect.ValueOf(subject))
    subjectType := subjectValue.Type()

    // Iterate over the fields of the embedded anonymous struct
    for i := 0; i < subjectType.NumField(); i++ {
        field := subjectType.Field(i)
        name := subjectType.Field(i).Name
        jsonFieldName := field.Tag.Get("json")

        // Exclude fields with "-" JSON tag
        if jsonFieldName == "-" {
            continue
        }

        // Add field values to the flattened map
        links[jsonFieldName] = subjectValue.FieldByName(name).Interface().(string)
    }

    // Return the JSON-encoded map
    return json.MarshalIndent(links, "", "    ")
}</code>

Dengan menggantikan ahli tanpa nama dengan peta yang dibina secara dinamik, fungsi MarshalHateoas kini meratakan output JSON dengan betul:

<code class="json">{
    "id": 123,
    "name": "James Dean",
    "_links": {
        "self": "http://user/123"
    }
}</code>

Penyelesaian ini membolehkan penciptaan perwakilan JSON yang diratakan daripada struct dengan ahli tanpa nama terbenam tanpa memperkenalkan medan baharu atau bergantung pada helah khusus platform atau bergantung kepada perpustakaan.

Atas ialah kandungan terperinci Bagaimana untuk Meratakan Struktur Tanpa Nama Terbenam dalam JSON dengan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn