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

2022-06-29 17:12:57 +08:00
 wangshouh

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

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

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

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

1374 次点击
所在节点    Go 编程语言
8 条回复
AjiuJiang
2022-06-29 17:32:58 +08:00
经常用到一个 json 库 github.com/json-iterator/go
dzdh
2022-06-29 17:35:49 +08:00
先整个 unmarshal 后取出 string 再 unmarshal
KasonPasser
2022-06-29 17:36:01 +08:00
让写接口的返回一个数组
reter
2022-06-29 17:41:50 +08:00
sun522198558
2022-06-29 18:05:35 +08:00
暴力替换

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
2022-06-29 18:45:27 +08:00
@reter 使用您的方法解决了问题,非常感谢
wangshouh
2022-06-29 18:46:10 +08:00
@AjiuJiang 测试了一下,这个库不能自动处理转义字符串
EminemW
2022-07-08 23:12:40 +08:00
@reter #4 这是什么骚操作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862985

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX