Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyahsiri json dengan tatasusunan tanpa nama di Golang?

Bagaimana untuk menyahsiri json dengan tatasusunan tanpa nama di Golang?

WBOY
WBOYke hadapan
2024-02-14 11:24:21887semak imbas

如何在 Golang 中用匿名数组反序列化 json?

Di Golang, bagaimana untuk menggunakan tatasusunan tanpa nama untuk menyahsiri data json? Ini adalah masalah yang sering dihadapi oleh banyak pembangun. Tatasusunan tanpa nama boleh mengendalikan beberapa struktur data ringkas dengan mudah tanpa menentukan struktur tertentu. Dengan menggunakan pakej json terbina dalam Golang, kami boleh melaksanakan fungsi ini dengan mudah. Di bawah, editor PHP Xinyi akan memperkenalkan anda secara terperinci cara menggunakan tatasusunan tanpa nama untuk menyahsiri data json di Golang. Mari lihat!

Kandungan soalan

Saya menerima json ini daripada pelayan luaran:

[["010117", "070117", "080117"], ["080117", "140117", "150117"], ["150117", "210117", "220117"]]

Saya perlu menghuraikannya

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "os"
    "runtime"
)

type Range struct {
    From string
    To   string
    Do   string
}

type AllRanges struct {
    Ranges []Range
}

func main() {
    var ranges AllRanges
    j, err := os.ReadFile(file)

    if err != nil {
        panic("Can't read json file")
    }

    if json.Unmarshal(j, &v) != nil {
        panic("Error reading the json")
    }
}

Apabila saya melaksanakan, panik dilemparkan mengatakan ralat berlaku semasa membaca json

Terima kasih terlebih dahulu!

Penyelesaian

  1. Ini bukan kod yang gagal. Kod yang anda siarkan tidak akan dikompilkan kerana ia cuba menyahmarshal menjadi pembolehubah yang tidak diisytiharkan v.

  2. Andaikan v应该是ranges sepatutnya

    , masalahnya sangat mudah....

ranges 的类型为 allranges,它是一个具有命名成员的结构体,ranges

ialah susunan struktur yang turut menamakan ahli.

Jadi apabila cuba unmarshaler json ke dalam struktur ini, unmarshaler akan mengharapkan untuk mencari:

{
   "ranges": [
        { 
           "from": "..",
           "to": ..,
           "do": ".."
        },
        { etc }
   ]
}
rangesUntuk menyahmarshal data daripada tatasusunan rentetan tanpa nama, anda perlu mengisytiharkan

sebagai tatasusunan rentetan:

    var ranges [][]string

    ...

    if json.Unmarshal(j, &ranges) != nil {
        panic("Error reading the json")
    }

Setelah menyahmarshall ke dalam tatasusunan ini, anda perlu menulis kod untuk menukarnya kepada nilai berstruktur yang diingini.

taman permainan [][]string ini menunjukkan cara untuk berjaya mengeluarkan data sampel ke dalam

. Transformasi dibiarkan sebagai latihan. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menyahsiri json dengan tatasusunan tanpa nama di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam