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

Linda Hamilton
Lepaskan: 2024-10-31 01:00:29
asal
987 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!