为了账号安全,请及时绑定邮箱和手机立即绑定

Can I modify json.RawMessage?

Can I modify json.RawMessage?

Go
米琪卡哇伊 2021-11-22 15:36:33
这是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 新手,我只是想解决将其解组为强类型语言的困难。
查看完整描述

2 回答

?
SMILET

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 新手,我只是想解决将其解组为强类型语言的困难。


查看完整回答
反对 回复 2021-11-22
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

我认为大卫有一个很好(更好)的答案,但直接回答你的问题:是的,如果你小心的话,你可以修改 a json.RawMessage。它被声明为type json.RawMessage []byte,这意味着它只是[]byte引擎盖下的另一个名称。您可以将其转换为[]bytestring,对其进行修改,然后将其转换回。

对序列化数据执行字符串选项不是不考虑后果就应该做的事情,但在包装[]围绕 JSON 对象的情况下,证明它应该是安全的并不难。如果msgjson.RawMessage代表一个对象,那么

json.RawMessage("[" + string(msg) + "]")

是我认为一种可读的方法来RawMessage表示包含该对象的数组:)


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信