Heim Backend-Entwicklung Golang So lesen Sie JSON in Golang

So lesen Sie JSON in Golang

May 14, 2023 pm 08:56 PM

Go-Sprache ist eine stark typisierte Programmiersprache, die häufig für die Netzwerkprogrammierung und die Verarbeitung großer Datenmengen verwendet wird. Als leichtes Datenaustauschformat wird JSON häufig zum Senden und Empfangen von Daten in der Netzwerkübertragung verwendet. Das Lesen von JSON-Daten ist eine sehr häufige Aufgabe in der Go-Sprache. Nun, in diesem Artikel stellen wir vor, wie man Golang zum Lesen von JSON-Daten verwendet.

1. Verwenden der JSON-Struktur in Golang

In Golang können Sie die Struktur verwenden, um das JSON-Format zu definieren, und dann können Sie die Funktion json.Unmarshal() verwenden Analysieren Sie die JSON-Daten, um das Lesen des JSON-Arrays zu implementieren. Der folgende Code zeigt, wie ein Array aus JSON-Daten gelesen wird.

package main
import (
    "encoding/json"
    "fmt"
)
type Book struct {
    Title  string `json:"title"`
    Author string `json:"author"`
    Price  string `json:"price"`
}
func main() {
    jsonData := `[{"title":"Golang实战开发","author":"张三","price":"100元"},
                  {"title":"深入浅出Go","author":"李四","price":"80元"}]`
    var books []Book
    json.Unmarshal([]byte(jsonData), &books)
    for _, book := range books {
        fmt.Println("Book Title: ", book.Title)
        fmt.Println("Book Author: ", book.Author)
        fmt.Println("Book Price: ", book.Price)
    }
}
Nach dem Login kopieren

Im obigen Code definieren wir zunächst eine Buchstruktur, um die Attributinformationen jedes Buches darzustellen. Diese Struktur verwendet das JSON-Tag zum Binden von JSON-Feldern, um sicherzustellen, dass wir JSON-Daten korrekt lesen können.

Als nächstes zeigen wir, wie man einen JSON-String in ein Book-Typ-Slice analysiert. Im Code erstellen wir zunächst ein leeres Slice, um die geparsten Daten zu speichern. Anschließend rufen wir die Funktion json.Unmarshal() auf und übergeben ihr die JSON-Daten und einen Zeiger auf das leere Slice, das wir erstellt haben. Zu diesem Zeitpunkt analysiert die Funktion automatisch die JSON-Zeichenfolge und analysiert die Daten in ein Segment vom Typ Buch. json.Unmarshal()函数,并向其传递JSON数据和指向我们创建的空slice的指针。此时,该函数将会自动解析JSON字符串,并将数据解析为Book类型的slice。

最后,我们遍历刚刚解析出来的slice,并将每本书的属性信息打印到终端中。当我们运行该程序时,可以看到以下输出结果:

Book Title:  Golang实战开发
Book Author:  张三
Book Price:  100元
Book Title:  深入浅出Go
Book Author:  李四
Book Price:  80元
Nach dem Login kopieren

二、使用Interface{}读取JSON数据

在某些场景下,我们并不知道JSON数据的具体结构,此时,我们可以使用interface{}类型的变量来处理JSON数据。下面的代码演示了如何使用interface{}类型来读取未知结构的JSON对象。

package main
import (
    "encoding/json"
    "fmt"
)
func main() {
    jsonData := `{"name":"张三","age":20}`
    var unknown map[string]interface{}
    json.Unmarshal([]byte(jsonData), &unknown)
    for key, value := range unknown {
        fmt.Printf("%v : %v
", key, value)
    }
}
Nach dem Login kopieren

在上面的例子中,我们使用了一个interface{}类型的map来接收未知结构的JSON数据,这样就不需要提前定义结构体了。json.Unmarshal()

Schließlich durchlaufen wir den gerade analysierten Slice und geben die Attributinformationen jedes Buches an das Terminal aus. Wenn wir das Programm ausführen, können wir die folgende Ausgabe sehen:

name : 张三
age : 20
Nach dem Login kopieren

2. Verwenden Sie Interface{}, um JSON-Daten zu lesen

In einigen Szenarien wissen wir das Spezifische nicht Struktur von JSON-Daten. Zu diesem Zeitpunkt können wir Variablen vom Typ interface{} verwenden, um JSON-Daten zu verarbeiten. Der folgende Code zeigt, wie der Typ interface{} zum Lesen eines JSON-Objekts unbekannter Struktur verwendet wird.

package main
import (
    "encoding/json"
    "fmt"
)
func main() {
    jsonData := `{"name":"张三","age":20}`
    var unknown interface{}
    json.Unmarshal([]byte(jsonData), &unknown)
    m := unknown.(map[string]interface{})
    fmt.Println(m["name"], m["age"])
}
Nach dem Login kopieren

Im obigen Beispiel verwenden wir eine Karte vom Typ interface{}, um JSON-Daten unbekannter Struktur zu empfangen, sodass die Struktur nicht im Voraus definiert werden muss. Die Funktion json.Unmarshal() analysiert die JSON-Zeichenfolge in eine Variable vom Typ „map[string]interface{}“ und verwendet eine for-Schleife, um die Variable zu durchlaufen und ihre Schlüssel bzw. Werte auszugeben. Wenn wir das Programm ausführen, können wir die folgende Ausgabe sehen:

张三 20
Nach dem Login kopieren
3. Verwenden Sie nichtstrukturelle Typen, um JSON-Daten zu lesen.

Außerdem, wenn wir kleine JSON-Objekte verarbeiten Wenn Sie nur einen Teil der Daten lesen müssen, müssen Sie möglicherweise nicht zuerst eine Struktur definieren, sondern nur eine Wertvariable definieren und dann die JSON-Zeichenfolge direkt in die Variable analysieren. Der folgende Code zeigt, wie Nichtstrukturtypen zum Lesen von JSON-Objekten verwendet werden.

rrreee

Im obigen Code verwenden wir eine Variable vom Typ interface{}, um JSON-Daten zu empfangen und verwenden Typzusicherungen, um sie in den Typ „map[string]interface{}“ zu konvertieren. Dann haben wir die Felder „Name“ und „Alter“ aus der Karte herausgenommen und die Ausgabe ausgedruckt. #🎜🎜##🎜🎜#Wenn wir das Programm ausführen, können wir die folgende Ausgabe sehen: #🎜🎜#rrreee#🎜🎜#Zusammenfassung#🎜🎜##🎜🎜#Das Lesen von JSON-Daten in Golang ist ein Kinderspiel. Sehr praktische Sache. Die Verwendung einer Struktur zum Definieren des JSON-Formats kann das Programm übersichtlicher machen. Durch die Verwendung von Variablen des Typs interface{} können JSON-Daten unbekannter Struktur empfangen werden, während die Verwendung nichtstruktureller Typen den Code vereinfachen und die Ausführungseffizienz des Programms verbessern kann. Natürlich haben die oben genannten drei Methoden zum Lesen von JSON-Daten ihre Vor- und Nachteile, und wir können die entsprechende Methode je nach Szenario flexibel auswählen. #🎜🎜#

Das obige ist der detaillierte Inhalt vonSo lesen Sie JSON in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich? GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich? Mar 03, 2025 pm 05:17 PM

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren? Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren? Mar 03, 2025 pm 05:22 PM

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache? Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache? Mar 03, 2025 pm 05:18 PM

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Mar 10, 2025 pm 05:38 PM

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren? Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren? Mar 10, 2025 pm 03:20 PM

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen? Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen? Mar 10, 2025 pm 05:36 PM

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie schreibt man Unit -Tests in Go? Wie schreibt man Unit -Tests in Go? Mar 21, 2025 pm 06:34 PM

Wie schreibt man Unit -Tests in Go?

Wie schreibe ich Dateien in Go Language bequem? Wie schreibe ich Dateien in Go Language bequem? Mar 03, 2025 pm 05:15 PM

Wie schreibe ich Dateien in Go Language bequem?

See all articles