Go解析JSON字符串到map或结构体

解析JSON字符串到Go的map

package main  
  
import (  
    "encoding/json"  
    "fmt"  
    "log"  
)  
  
func main() {  
    // 假设这是你要解析的JSON字符串  
    jsonStr := `{"name": "John", "age": 30, "city": "New York"}`  
  
    // 声明一个map来存储解析后的数据  
    var result map[string]interface{}  
  
    // 解析JSON字符串到map  
    err := json.Unmarshal([]byte(jsonStr), &result)  
    if err != nil {  
        log.Fatalf("error parsing JSON: %s", err)  
    }  
  
    // 现在你可以像访问map一样访问解析后的数据了  
    fmt.Println(result["name"])  // 输出: John  
    fmt.Println(result["age"])   // 输出: 30(注意:这将是float64类型,因为JSON中的数字默认为浮点数)  
    fmt.Println(result["city"])  // 输出: New York  
}

解析JSON字符串到Go的结构体

package main  
  
import (  
    "encoding/json"  
    "fmt"  
    "log"  
)  
  
// 定义一个结构体来匹配JSON数据  
type Person struct {  
    Name string `json:"name"`  
    Age  int    `json:"age"`  
    City string `json:"city"`  
}  
  
func main() {  
    // 假设这是你要解析的JSON字符串  
    jsonStr := `{"name": "John", "age": 30, "city": "New York"}`  
  
    // 声明一个Person类型的变量来存储解析后的数据  
    var person Person  
  
    // 解析JSON字符串到结构体  
    err := json.Unmarshal([]byte(jsonStr), &person)  
    if err != nil {  
        log.Fatalf("error parsing JSON: %s", err)  
    }  
  
    // 现在你可以直接访问结构体的字段了  
    fmt.Println(person.Name)  // 输出: John  
    fmt.Println(person.Age)   // 输出: 30  
    fmt.Println(person.City)  // 输出: New York  
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Go 中,可以使用标准库中的 `encoding/json` 包将 JSON 字符串反序列化成对应的结构体或者 map 类型。对于一段复杂的 JSON 字符串,可以按照以下步骤进行反序列化操作: 1. 根据 JSON 字符串的格式定义一个对应的 Go 结构体类型,或者使用 map 类型接收 JSON 数据。 例如,如果 JSON 字符串的格式为 `{"name": "Tom", "age": 18, "address": {"city": "Beijing", "street": "Nanluoguxiang"}}`,则可以定义如下的 Go 结构体类型: ```go type Address struct { City string `json:"city"` Street string `json:"street"` } type Person struct { Name string `json:"name"` Age int `json:"age"` Address Address `json:"address"` } ``` 其中,`Address` 结构体嵌套在 `Person` 结构体中,用于描述 `Person` 的地址信息。 2. 将 JSON 字符串转换成字节数组(`[]byte`)。 例如,如果 JSON 字符串为 `{"name": "Tom", "age": 18, "address": {"city": "Beijing", "street": "Nanluoguxiang"}}`,则可以通过 `[]byte(jsonStr)` 将其转换成字节数组。 3. 调用 `json.Unmarshal` 函数将 JSON 字符串反序列化到 Go 结构体或者 map 类型中。 例如,可以按照以下方式调用 `json.Unmarshal` 函数进行反序列化操作: ```go var p Person err := json.Unmarshal([]byte(jsonStr), &p) if err != nil { // 处理反序列化失败的错误 } ``` 在调用 `json.Unmarshal` 函数时,第一个参数为要反序列化的 JSON 字符串所对应的字节数组,第二个参数为一个指向要反序列化到的 Go 结构体对象的指针或者 map 类型对象的指针。在函数执行成功后,Go 结构体对象 `p` 或者 map 类型对象就会被赋值为 JSON 字符串所对应的值。 需要注意的是,如果 JSON 字符串中的键值对与 Go 结构体中的字段不匹配,或者 JSON 字符串格式不正确,都有可能导致反序列化失败,此时需要进行错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大叔是90后大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值