Maison  >  Article  >  développement back-end  >  Comment trier et filtrer les données JSON dans Golang ?

Comment trier et filtrer les données JSON dans Golang ?

WBOY
WBOYoriginal
2024-06-01 13:38:561204parcourir

Trier et filtrer les données JSON dans Golang : Trier : utilisez la fonction sort.Slice pour trier les données JSON en fonction des champs spécifiés. Filtrage : utilisez les boucles for et les instructions conditionnelles pour filtrer les données JSON en fonction de conditions spécifiées. Cas pratique : Lire les informations utilisateur à partir d'un fichier JSON, trier par âge par ordre décroissant et filtrer les utilisateurs de plus de 25 ans.

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

Comment trier et filtrer les données JSON dans Golang

JSON (JavaScript Object Notation) est un format d'échange de données léger basé sur du texte qui est largement utilisé dans les applications Web et mobiles. Lors du traitement des données JSON dans Golang, nous devons souvent trier et filtrer les données pour obtenir les informations souhaitées.

Trier

Utilisez le package sort pour trier les données 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}]
}

过滤

使用 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}]
}

Filter

Utilisez les boucles for et les instructions conditionnelles pour filtrer les données JSON :

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

Cas pratique

Considérons un scénario : vous disposez d'un fichier JSON contenant des informations sur les utilisateurs et vous souhaitez trier les utilisateurs par âge par ordre décroissant et obtenir uniquement les utilisateurs dont l'âge est supérieur à 25 ans.

Fichier 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}]
}
🎜🎜Code Golang : 🎜🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Articles Liés

Voir plus