V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
wangshouh

对部分转义的 JSON 如何进行 unmarshal?

  •  
  •   wangshouh · Jun 29, 2022 · 2268 views
    This topic created in 1400 days ago, the information mentioned may be changed or developed.

    最近写代码请求一个 api ,返回的 json 如下:

    {
        "publisher": "中国人民大学出版社",
        "holdings": "[{\"callNo\":\"F820/49=7\",\"shelfMark\":null,\"itemsCount\":1}]"
    }
    

    我想对holdings进行 unmarshal ,但尝试了一下直接调用函数,出现报错。

    我个人目前的想法是取出holdings,使用strconv.Unquote转义后再 unmarshal ,但感觉比较复杂,请问各位有什么好的办法?

    8 replies    2022-07-08 23:12:40 +08:00
    AjiuJiang
        1
    AjiuJiang  
       Jun 29, 2022   ❤️ 1
    经常用到一个 json 库 github.com/json-iterator/go
    dzdh
        2
    dzdh  
       Jun 29, 2022   ❤️ 1
    先整个 unmarshal 后取出 string 再 unmarshal
    KasonPasser
        3
    KasonPasser  
       Jun 29, 2022
    让写接口的返回一个数组
    reter
        4
    reter  
       Jun 29, 2022   ❤️ 1
    sun522198558
        5
    sun522198558  
       Jun 29, 2022   ❤️ 1
    暴力替换

    type S struct {
    Publisher string `json:"publisher"`
    Holdings []struct {
    CallNo string `json:"callNo"`
    ShelfMark interface{} `json:"shelfMark"`
    ItemsCount int `json:"itemsCount"`
    } `json:"holdings"`
    }
    var s S
    _ = json.Unmarshal([]byte(strings.Replace(strings.Replace(strings.Replace(`{
    "publisher": "中国人民大学出版社",
    "holdings": "[{\"callNo\":\"F820/49=7\",\"shelfMark\":null,\"itemsCount\":1}]"
    }`, "\\\"", "\"", -1), "\"[", "[", -1), "]\"", "]", -1)), &s)
    fmt.Println(s)
    wangshouh
        6
    wangshouh  
    OP
       Jun 29, 2022
    @reter 使用您的方法解决了问题,非常感谢
    wangshouh
        7
    wangshouh  
    OP
       Jun 29, 2022
    @AjiuJiang 测试了一下,这个库不能自动处理转义字符串
    EminemW
        8
    EminemW  
       Jul 8, 2022
    @reter #4 这是什么骚操作
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3233 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 11:56 · PVG 19:56 · LAX 04:56 · JFK 07:56
    ♥ Do have faith in what you're doing.