提供了多个 API 来处理 JSON,包括使用 /json 包来往来于内置和自定义数据类型。
使用 () 和 () 方法将对象转换为 JSON 和 JSON 数据为字符串。 这些方法以字节格式返回数据,我们需要将返回的数据更改为 JSON 或 。
在本文中,我们将了解 中的数据编组和解组。
中的元帅
将 Go 对象转换为 JSON 在 中称为编组json 数组json 数组,使用内置的 /json 包来执行 JSON 相关的操作。
json.Marshal(v any) ([]byte, error)
借助上述函数, 返回 v 的 JSON 编码,进一步,我们可以将字节数据转换为字符串并返回。
package main
import (
"encoding/json"
"fmt"
)
type Books struct {
Name string
Author string
Rating float64
}
func main() {
book := Books{Name: "Rich Dad Poor Dad", Author: "Robert Kiyosaki and Sharon Lechter", Rating: 4.7}
bookData, err := json.Marshal(book)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(bookData))
// Output: {"Name":"Rich Dad Poor Dad","Author":"Robert Kiyosaki and Sharon Lechter","Rating":4.7}
}
在 中解组
这与元帅正好相反。 将 JSON(Byte data) 转换为 并将结果存储在变量指向的值中。
json.Unmarshal(data []byte, v any)
借助上述函数, 返回 JSON 数据的实际值。
package main
import (
"encoding/json"
"fmt"
)
type Book struct {
Name string `json:"name"`
Author string `json:"author"`
Rating float64 `json:"rating"`
}
func main() {
bookJsonData := `{"Name":"Hamlet", "Author":"William Shakespeare", "Rating":4.3}`
bookBytes := []byte(bookJsonData)
var book Book
json.Unmarshal(bookBytes, &book)
fmt.Println(book.Name, "," , book.Author, "," ,book.Rating)
//Output: Hamlet , William Shakespeare , 4.3
}
现在让我们看看使用上述函数编写一些代码并对 JSON 数据集进行一些修改。
让我们考虑给定的数据集:
{
"_id": "62b435e407bc586da8d297cb",
"index": 4,
"guid": "57a22da3-d791-4420-9245-465a34730537",
"gender": "male",
"company": "EZENT",
"email": "barrerajarvis@ezent.com",
"phone": "+1 (801) 499-2594",
"friends": [
{
"id": 0,
"name": "Dale Sexton",
"email": "Dale.sexton@example.com"
},
{
"id": 1,
"name": "Watkins Puckett",
"email": "Watkins.puckett@example.com"
},
{
"id": 2,
"name": "Luann Bond",
"email": "Luann.bond@example.com"
}
],
"greeting": "Hello, Barrera Jarvis! You have 8 unread messages.",
"favoriteFruit": "banana"
}
并且,问题陈述是写下从朋友数组中删除电子邮件字段的代码。
现在,让我们写下修改 JSON 数据的代码:
package main
import (
"encoding/json"
"log"
"os"
)
func main() {
inputs := `{
"_id": "62b435e407bc586da8d297cb",
"index": 4,
"guid": "57a22da3-d791-4420-9245-465a34730537",
"gender": "male",
"company": "EZENT",
"email": "barrerajarvis@ezent.com",
"phone": "+1 (801) 499-2594",
"friends": [
{
"id": 0,
"name": "Dale Sexton",
"email": "Dale.sexton@example.com"
},
{
"id": 1,
"name": "Watkins Puckett",
"email": "Watkins.puckett@example.com"
},
{
"id": 2,
"name": "Luann Bond",
"email": "Luann.bond@example.com"
}
],
"greeting": "Hello, Barrera Jarvis! You have 8 unread messages.",
"favoriteFruit": "banana"
}`
var v any
if err := json.Unmarshal([]byte(inputs), &v); err != nil {
log.Fatal(err)
}
if v, ok := v.(map[string]any); ok {
// if the "inputs" field is a JSON array ...
if v, ok := v["friends"].([]any); ok {
// for each element in the JSON array ...
for _, v := range v {
// if the element is a JSON object ...
if v, ok := v.(map[string]any); ok {
// remove key boo
delete(v, "email")
}
}
}
}
p, _ := json.Marshal(v)
os.Stdout.Write(p)
//Output : {"_id":"62b435e407bc586da8d297cb","company":"EZENT","email":"barrerajarvis@ezent.com","favoriteFruit":"banana","friends":[{"id":0,"name":"Dale Sexton"},
// {"id":1,"name":"Watkins Puckett"},{"id":2,"name":"Luann Bond"}], "gender":"male","greeting":"Hello, Barrera Jarvis! You have 8 unread messages.",
// "guid":"57a22da3-d791-4420-9245-465a34730537","index":4,"phone":"+1 (801) 499-2594"}
}
我希望你喜欢这篇文章。
谢谢阅读
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。