2 回答
TA贡献1796条经验 获得超4个赞
这是JSON 有时是数组有时是对象的后续
在最初的问题中,我问了如何处理:“我正在使用一个 json API,它可能为变量返回一个字符串,或者可能为一个变量返回一个数组”
我有一个解决方案,但我想知道,有没有办法修改 json.RawMessage?
而不是如果/然后查看 [ 或 { 字符的 RawMessage 以确定对象是数组还是字符串,如果我总是采用 RawMessage 变量字符串并将其转换为数组会怎样?
这样,我不必为两个字符串和数组编写所有访问器。我可以简单地处理数组。
所以我的问题是:有没有办法修改 json.RawMessage?
例如:
转这个:
{
"net": {
"comment": {
"line":
{
"$": "All abuse issues will only be responded to by the Abuse",
"@number": "0"
}
}
}
进入这个:
{
"net": {
"comment": {
"line": [
{
"$": "All abuse issues will only be responded to by the Abuse",
"@number": "0"
}
]
}
}
所以,这样,当我解组到我的结构中时,只有一种类型的 comment.line,只是 line[] vs line[] AND line。
提前致谢。
我是一个 golang 新手,我只是想解决将其解组为强类型语言的困难。
TA贡献1801条经验 获得超8个赞
我认为大卫有一个很好(更好)的答案,但直接回答你的问题:是的,如果你小心的话,你可以修改 a json.RawMessage
。它被声明为type json.RawMessage []byte
,这意味着它只是[]byte
引擎盖下的另一个名称。您可以将其转换为[]byte
或string
,对其进行修改,然后将其转换回。
对序列化数据执行字符串选项不是不考虑后果就应该做的事情,但在包装[
和]
围绕 JSON 对象的情况下,证明它应该是安全的并不难。如果msg
是json.RawMessage
代表一个对象,那么
json.RawMessage("[" + string(msg) + "]")
是我认为一种可读的方法来RawMessage
表示包含该对象的数组:)
- 2 回答
- 0 关注
- 184 浏览
添加回答
举报