Maison >développement back-end >Golang >Convertir les données d'un fichier Excel en chaîne JSON dans Go sans aucune définition de structure

Convertir les données d'un fichier Excel en chaîne JSON dans Go sans aucune définition de structure

WBOY
WBOYavant
2024-02-05 22:45:08557parcourir

在 Go 中将 Excel 文件数据转换为 JSON 字符串,无需任何结构体定义

Contenu des questions

Je suis nouveau dans la langue. J'ai besoin qu'une application lise un fichier Excel et le convertisse en chaîne json sans s'appuyer sur une structure définie. J'ai exploré quelques bibliothèques où soit cette définition de structure est requise, soit au moins il doit y avoir des en-têtes de colonnes Excel. Par exemple,

github.com/xuri/excelize
github.com/onkarvhanumante/Excel2JsonTree
github.com/FerdinaKusumah/excel2json

Cependant, je ne trouve aucun endroit capable de gérer les données Excel brutes et de les convertir en json.

S'il vous plaît, donnez-moi quelques conseils, merci !


Réponse correcte


Si vous pouvez traiter toutes les valeurs comme des chaînes, vous pouvez le faire comme indiqué dans l'extrait de code ci-dessous. Le script lit toutes les feuilles de calcul (onglets) et crée des fichiers json en deux formats (avec et sans en-têtes).

package main

import (
    "encoding/json"
    "fmt"
    "os"

    "github.com/xuri/excelize/v2"
)

func main() {
    f, err := excelize.OpenFile("test.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()

    // could have multiple sheets
    sheets := f.GetSheetList()
    for _, sheetName := range sheets {
        d, err := f.GetRows(sheetName)
        if err != nil {
            fmt.Println("error reading sheet", sheetName, ":", err)
            return
        }

        saveAsJSON(d, sheetName+".json")
        saveAsJSONWithHeaders(d, sheetName+"_with_headers.json")
    }

}

func saveAsJSONWithHeaders(rows [][]string, filename string) error {
    data := make([]map[string]string, len(rows)-1)
    headers := rows[0]
    // excluding header row
    for i, row := range rows[1:] {
        data[i] = make(map[string]string)
        for j, cellValue := range row {
            data[i][headers[j]] = cellValue
        }
    }

    return saveAsJSON(data, filename)
}

func saveAsJSON(data interface{}, filename string) error {
    file, err := os.Create(filename)
    if err != nil {
        return err
    }
    defer file.Close()
    encoder := json.NewEncoder(file)
    if err := encoder.Encode(data); err != nil {
        return err
    }
    return nil
}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer