Bagaimana untuk mengisih dan menapis data JSON di Golang?

WBOY
Lepaskan: 2024-06-01 13:38:56
asal
1201 orang telah melayarinya

Isih dan tapis data JSON dalam Golang: Isih: Gunakan fungsi isihan.Slice untuk mengisih data JSON berdasarkan medan yang ditentukan. Penapisan: Gunakan untuk gelung dan pernyataan bersyarat untuk menapis data JSON berdasarkan syarat yang ditentukan. Kes praktikal: Baca maklumat pengguna daripada fail JSON, susun mengikut umur dalam tertib menurun dan tapis pengguna yang berumur lebih daripada 25 tahun.

如何在 Golang 中对 JSON 数据进行排序和过滤?

Cara mengisih dan menapis data JSON dalam Golang

JSON (JavaScript Object Notation) ialah format pertukaran data berasaskan teks yang ringan yang digunakan secara meluas dalam aplikasi web dan mudah alih . Apabila memproses data JSON di Golang, kami selalunya perlu mengisih dan menapis data untuk mendapatkan maklumat yang kami inginkan.

Isih

Gunakan pakej isih untuk mengisih data JSON: sort 包对 JSON 数据进行排序:

package main

import (
    "encoding/json"
    "fmt"
    "sort"
)

type Person struct {
    Name  string
    Age   int
    Score float64
}

func main() {
    data := []Person{
        {"John", 25, 85.5},
        {"Mary", 28, 90.0},
        {"Bob", 23, 87.2},
    }

    // 根据 Age 字段升序排序
    sort.Slice(data, func(i, j int) bool {
        return data[i].Age < data[j].Age
    })
    fmt.Println(data) // 输出:[{Bob 23 87.2} {John 25 85.5} {Mary 28 90}]

    // 根据 Score 字段降序排序
    sort.Slice(data, func(i, j int) bool {
        return data[i].Score > data[j].Score
    })
    fmt.Println(data) // 输出:[{Mary 28 90} {Bob 23 87.2} {John 25 85.5}]
}
Salin selepas log masuk

过滤

使用 for

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name  string
    Age   int
    Score float64
}

func main() {
    data := []Person{
        {"John", 25, 85.5},
        {"Mary", 28, 90.0},
        {"Bob", 23, 87.2},
    }

    // 过滤出年龄大于 25 的人员
    filteredData := []Person{}
    for _, person := range data {
        if person.Age > 25 {
            filteredData = append(filteredData, person)
        }
    }
    fmt.Println(filteredData) // 输出:[{Mary 28 90}]
}
Salin selepas log masuk

Tapis

Gunakan untuk gelung

dan pernyataan bersyarat untuk menapis data JSON:

[
  {
    "name": "John",
    "age": 25,
    "score": 85.5
  },
  {
    "name": "Mary",
    "age": 28,
    "score": 90.0
  },
  {
    "name": "Bob",
    "age": 23,
    "score": 87.2
  }
]
Salin selepas log masuk

Kes Praktikal

Mari kami pertimbangkan satu senario: anda mempunyai fail JSON yang mengandungi maklumat pengguna dan anda ingin mengisih pengguna mengikut umur dalam tertib menurun dan hanya mendapatkan pengguna yang berumur lebih daripada 25 tahun.

Fail JSON:

🎜
package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "os"
    "sort"
)

type Person struct {
    Name  string
    Age   int
    Score float64
}

func main() {
    // 从文件读取 JSON 数据
    jsonFile, err := os.Open("users.json")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer jsonFile.Close()

    byteValue, err := ioutil.ReadAll(jsonFile)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 解码 JSON 数据
    var data []Person
    err = json.Unmarshal(byteValue, &data)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 对数据进行排序和过滤
    sort.Slice(data, func(i, j int) bool {
        return data[i].Age > data[j].Age
    })

    filteredData := []Person{}
    for _, person := range data {
        if person.Age > 25 {
            filteredData = append(filteredData, person)
        }
    }

    // 打印结果
    fmt.Println(filteredData) // 输出:[{Mary 28 90}]
}
Salin selepas log masuk
🎜🎜Kod Golang: 🎜🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk mengisih dan menapis data JSON di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
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!