【问题标题】:Unmarshaling from JSON key containing a single quote从包含单引号的 JSON 键解组
【发布时间】:2022-12-11 06:42:25
【问题描述】:

我对此感到很不解。 我需要加载一些以 JSON 序列化的数据(来自法语数据库),其中一些键带有单引号。

这是一个简化版本:

package main

import (
    "encoding/json"
    "fmt"
)

type Product struct {
    Name string `json:"nom"`
    Cost int64  `json:"prix d'achat"`
}

func main() {
    var p Product
    err := json.Unmarshal([]byte(`{"nom":"savon", "prix d'achat": 170}`), &p)
    fmt.Printf("product cost: %d\nerror: %s\n", p.Cost, err)
}

// product cost: 0
// error: %!s(<nil>)

解组不会导致错误,但是“prix d'achat”(p.Cost)未正确解析。

当我解组为 map[string]any 时,“prix d'achat”键被解析为我所期望的:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    blob := map[string]any{}
    err := json.Unmarshal([]byte(`{"nom":"savon", "prix d'achat": 170}`), &blob)
    fmt.Printf("blob: %f\nerror: %s\n", blob["prix d'achat"], err)
}

// blob: 170.000000
// error: %!s(<nil>)

我检查了关于结构标签的 json.Marshal 文档,但我没有发现我尝试处理的数据有任何问题。

我在这里遗漏了一些明显的东西吗? 如何使用结构标签解析包含单引号的 JSON 键?

非常感谢您的任何见解!

【问题讨论】:

    标签: json go


    【解决方案1】:

    您需要使用反斜杠转义该字符

    type Product struct {
        Name string `json:"nom"`
        Cost int64  `json:"prix d'achat"`
    }
    

    完整示例:https://go.dev/play/p/h-tHdyFE4_G

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 2021-12-12
      • 2023-04-01
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多