猿问

Can I modify json.RawMessage?

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


米琪卡哇伊
浏览 185回答 2
2回答

SMILET

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

蝴蝶刀刀

我认为大卫有一个很好(更好)的答案,但直接回答你的问题:是的,如果你小心的话,你可以修改 a json.RawMessage。它被声明为type json.RawMessage []byte,这意味着它只是[]byte引擎盖下的另一个名称。您可以将其转换为[]byte或string,对其进行修改,然后将其转换回。对序列化数据执行字符串选项不是不考虑后果就应该做的事情,但在包装[和]围绕 JSON 对象的情况下,证明它应该是安全的并不难。如果msg是json.RawMessage代表一个对象,那么json.RawMessage("[" + string(msg) + "]")是我认为一种可读的方法来RawMessage表示包含该对象的数组:)
随时随地看视频慕课网APP

相关分类

Go
我要回答