当前位置: 首页 > 面试题库 >

json.RawMessage的元帅

国言
2023-03-14
问题内容

请在此处找到代码http://play.golang.org/p/zdQ14ItNBZ

我将JSON数据保留为RawMessage,但无法将其解码。我需要将包含结构进行编组和解组,但是我希望仍然能够获取JSON字段。

码:

package main

import (
    "encoding/json"
    "fmt"
)

type Data struct {
    Name string
    Id   int
    Json json.RawMessage
}
type Data2 struct {
    Name string
    Id   int
}


func main() {

    tmp := Data2{"World", 2}

    b, err := json.Marshal(tmp)
    if err != nil {
        fmt.Println("Error %s", err.Error())
    }
    fmt.Println("b %s", string(b))

    test := Data{"Hello", 1, b}
    b2, err := json.Marshal(test)
    if err != nil {
        fmt.Println("Error %s", err.Error())
    }

    fmt.Println("b2 %s", string(b2))

    var d Data
    err = json.Unmarshal(b2, &d)
    if err != nil {
        fmt.Println("Error %s", err.Error())
    }
    fmt.Println("d.Json %s", string(d.Json))

    var tmp2 Data2
    err = json.Unmarshal(d.Json, &tmp2)
    if err != nil {
        fmt.Println("Error %s", err.Error())
    }
    fmt.Println("Data2 %+v", tmp2)

}

出:

b %s {"Name":"World","Id":2}
b2 %s {"Name":"Hello","Id":1,"Json":"eyJOYW1lIjoiV29ybGQiLCJJZCI6Mn0="}
d.Json %s "eyJOYW1lIjoiV29ybGQiLCJJZCI6Mn0="
Error %s json: cannot unmarshal string into Go value of type main.Data2
Data2 %+v { 0}

问题答案:

json.RawMessage上的方法都带有一个指针接收器,这就是为什么您不能利用它们中的任何一个的原因;您没有指针。

从执行的意义上说,这种“工作”是可行的,但这可能不是您想要的策略:http :
//play.golang.org/p/jYvh8nHata

基本上,您需要这样做:

type Data struct {
    Name string
    Id   int
    Json *json.RawMessage
}

然后将该更改传播到程序的其余部分。什么…您实际上想做什么?



 类似资料:
  • 问题内容: 我运行以下代码: 游乐场: http : //play.golang.org/p/qbkEIZRTPQ 输出: 所需的输出: 为什么base64编码它就像普通的一样? 毕竟,RawMessage的MarshalJSON实现只是返回字节片 问题答案: 在螺母中找到答案 传递给的值必须是正常工作的指针:

  • 我试图实现Yen提出的Bellman-Ford算法的优化,以及Bannister提出的随机加速 我正在跟踪班尼斯特 我已经能够成功地实现最初的Bellman-Ford算法,这是一个变体,包括算法的早期终止(当顶点距离没有变化时退出),以及Yen对算法的第一次改进(论文中的算法3)。 然而,我在实现Yen的第二个改进和Bannister-Eppstein随机改进(算法4)方面遇到了一些困难 文中给出

  • 下面我有以下数据。 所以,我不知道为什么UDF可以使用int而不能使用CharArray。此外,我觉得可能有一种方法可以做到这一点,而不使用UDF..但不确定从哪里开始。对这里可能发生的事情有什么建议吗?

  • 问题内容: 我有以下元组,其中包含元组: 我想根据内部元组中包含的 第二个 值对该元组进行排序(即对Apple,Carrot,Banana而不是A,B,C进行排序)。 有什么想法吗? 问题答案: 是否:

  • 本文向大家介绍jQuery 选择元素的子元素,包括了jQuery 选择元素的子元素的使用技巧和注意事项,需要的朋友参考一下 示例 要选择元素的子代,可以使用children()方法。 更改元素所有子.parent元素的颜色: 该方法接受一个可选selector参数,该参数可用于过滤返回的元素。            

  • 问题内容: 我需要将列表排序为: 我已经使用了该函数,并且能够根据值进行排序…但是我无法按字母顺序进行排序,因为我需要按照数字的降序和字母的升序对列表进行排序数字具有相同的值。 问题答案: 使用元组作为浮点数为负的排序键可以反转顺序: 如果您不能进行求反(例如对字符串或字母值或非数字值),则可以利用Python sort函数稳定的事实,并分两步进行排序: