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

2022 年 6 月 29 日
 wangshouh

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

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

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

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

2169 次点击
所在节点    Go 编程语言
8 条回复
AjiuJiang
2022 年 6 月 29 日
经常用到一个 json 库 github.com/json-iterator/go
dzdh
2022 年 6 月 29 日
先整个 unmarshal 后取出 string 再 unmarshal
KasonPasser
2022 年 6 月 29 日
让写接口的返回一个数组
reter
2022 年 6 月 29 日
sun522198558
2022 年 6 月 29 日
暴力替换

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 年 6 月 29 日
@reter 使用您的方法解决了问题,非常感谢
wangshouh
2022 年 6 月 29 日
@AjiuJiang 测试了一下,这个库不能自动处理转义字符串
EminemW
2022 年 7 月 8 日
@reter #4 这是什么骚操作

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

https://study.congcong.us/t/862985

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

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

© 2021 V2EX