Golang:如何解析解组解码 json 数组 API 响应

js

1个回答

写回答

JS
JS

如何解析/解组/解码 JSON 数组 API 响应?

在开发 Web 应用程序时,我们经常需要与外部 API 进行通信,并从 API 响应中获取所需的数据。JSON 是一种常用的数据交换格式,许多 API 都使用 JSON 格式来传输数据。在 Golang 中,我们可以使用标准库中的 encoding/JSon 包来解析、解组和解码 JSON 数据。

解析 JSON 数组

首先,让我们看一个简单的例子来理解如何解析 JSON 数组。假设我们有一个 API 响应,它返回了一个包含用户信息的 JSON 数组,每个用户都有 id、name 和 emAIl 属性。

go

package mAIn

import (

"encoding/JSon"

"fmt"

)

type User struct {

ID int <code>JSon:"id"</code>

Name string <code>JSon:"name"</code>

EmAIl string <code>JSon:"emAIl"</code>

}

func mAIn() {

// 假设这是 API 响应的 JSON 数据

JSonData := <code>[{"id": 1, "name": "Alice", "emAIl": "alice@example.com"}, {"id": 2, "name": "Bob", "emAIl": "bob@example.com"}]</code>

// 解析 JSON 数组

var users []User

err := JSon.Unmarshal([]byte(JSonData), &users)

if err != nil {

fmt.Println("解析 JSON 失败:", err)

return

}

// 打印解析后的用户信息

for _, user := range users {

fmt.Printf("ID: %d, Name: %s, EmAIl: %s\n", user.ID, user.Name, user.EmAIl)

}

}

在上面的代码中,我们定义了一个 User 结构体来表示用户信息。结构体的字段使用 JSon 标签来指定 JSON 数据中对应的属性名。

接下来,我们使用 JSon.Unmarshal 函数来解析 JSON 数据。该函数接受两个参数,第一个参数是 JSON 数据的字节切片,第二个参数是用来存储解析结果的变量的地址。在我们的例子中,我们将解析结果存储在了一个名为 users 的切片中。

最后,我们遍历 users 切片,并打印每个用户的信息。

解组 JSON 数组

解组是指将 JSON 数据解析到自定义的结构体或映射类型中。有时候,API 响应的 JSON 数据与我们定义的结构体字段不完全匹配,或者我们只需要解析 JSON 数据的一部分。在这种情况下,我们可以使用 JSon.Unmarshal 函数的另一个变种来解析 JSON 数据。

下面是一个示例代码,演示了如何解组 JSON 数组中的一部分数据:

go

package mAIn

import (

"encoding/JSon"

"fmt"

)

type User struct {

Name string <code>JSon:"name"</code>

EmAIl string <code>JSon:"emAIl"</code>

}

func mAIn() {

// 假设这是 API 响应的 JSON 数据

JSonData := <code>[{"name": "Alice", "emAIl": "alice@example.com"}, {"name": "Bob", "emAIl": "bob@example.com"}]</code>

// 解组 JSON 数组中的一部分数据

var users []User

err := JSon.Unmarshal([]byte(JSonData), &users)

if err != nil {

fmt.Println("解析 JSON 失败:", err)

return

}

// 只打印用户的名称

for _, user := range users {

fmt.Println("Name:", user.Name)

}

}

在上面的代码中,我们定义了一个只包含 Name 和 EmAIl 字段的 User 结构体。我们只关心用户的名称,所以只解析了 JSON 数据中的 name 属性。

解码 JSON 数组

解码是指将 JSON 数据解析为通用的数据结构,如 map、slice 或 interface{}。这在我们不事先知道 JSON 数据的结构时非常有用。

下面是一个解码 JSON 数组的示例代码:

go

package mAIn

import (

"encoding/JSon"

"fmt"

)

func mAIn() {

// 假设这是 API 响应的 JSON 数据

JSonData := <code>[{"name": "Alice", "emAIl": "alice@example.com"}, {"name": "Bob", "emAIl": "bob@example.com"}]</code>

// 解码 JSON 数组

var data interface{}

err := JSon.Unmarshal([]byte(JSonData), &data)

if err != nil {

fmt.Println("解析 JSON 失败:", err)

return

}

// 打印解码后的数据

fmt.Println(data)

}

在上面的代码中,我们没有定义任何结构体来表示 JSON 数据的结构,而是使用了一个空接口 interface{} 来存储解码后的数据。这样可以灵活地处理任何结构的 JSON 数据。

最后,我们打印解码后的数据,可以看到它是一个 map 的切片,每个 map 表示一个用户的数据。

在本文中,我们学习了如何在 Golang 中解析、解组和解码 JSON 数组 API 响应。我们使用了 encoding/JSon 包提供的函数和数据结构来实现这些功能。无论是解析整个 JSON 数组,还是只解析一部分数据,或者解码为通用的数据结构,都可以通过 encoding/JSon 包轻松实现。这使得我们能够轻松地与其他服务进行数据交换,并提取所需的信息。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号