当前位置: 首页 > 知识库问答 >
问题:

没有结构的json解组

傅穆冉
2023-03-14

我关注了 json

[{"href":"/publication/192a7f47-84c1-445e-a615-ff82d92e2eaa/article/b;version=1493756861347"},{"href":"/publication/192a7f47-84c1-445e-a615-ff82d92e2eaa/article/a;version=1493756856398"}]

根据给出的答案,我尝试了以下

var objmap map[string]*json.RawMessage
err := json.Unmarshal(data, &objmap)

我得到一个空数组,有如下错误。有什么建议吗?

json:无法将数组解组为map[string]*json.RawMessage类型的Go值

共有3个答案

岳彬炳
2023-03-14

您的json是一个对象数组,在Go中,编码/json包封送/解封送映射到/来自json对象而不是数组,因此您可能希望分配一个切片映射

var objs []map[string]*json.RawMessage
if err := json.Unmarshal([]byte(data), &objs); err != nil {
    panic(err)
}

https://play.golang.org/p/3lieuNkoUU

如果不想使用切片,则始终可以将 json 数组包装在对象中。

var dataobj = `{"arr":` + data + `}`
var objmap map[string]*json.RawMessage
if err := json.Unmarshal([]byte(dataobj), &objmap); err != nil {
    panic(err)
}

https://play.golang.org/p/XM8MmV0gbc

柯骏
2023-03-14

这不是直接的回答,但我认为非常有用

Json Unmarshal


func JsonIndent (jsontext []byte) ([]byte,error) {
    var err error
    var jsonIndent []byte
    var objmap map[string]*json.RawMessage
    err = json.Unmarshal(jsontext, &objmap)
    if err != nil {
        return jsonIndent,err
    }
    jsonIndent, err = json.MarshalIndent(objmap,"", "  ")
    return jsonIndent,err
}
扈韬
2023-03-14

您可以取消到 []map[string]interface{} 的 marshall,如下所示:

data := []byte(`[{"href":"/publication/192a7f47-84c1-445e-a615-ff82d92e2eaa/article/b;version=1493756861347"},{"href":"/publication/192a7f47-84c1-445e-a615-ff82d92e2eaa/article/a;version=1493756856398"}]`)
var objmap []map[string]interface{}
if err := json.Unmarshal(data, &objmap); err != nil {
    log.Fatal(err)
}
fmt.Println(objmap[0]["href"]) // to parse out your value

要了解有关取消分组工作原理的更多信息,请参阅此处:https://godoc.org/encoding/json#Unmarshal

 类似资料:
  • 问题内容: 我在Mac OS X 10.8.2上使用Go 1.0.3,并且正在尝试使用该软件包,试图将结构编组为json,但是我一直得到一个空的json对象。 该值是零,所以没有什么根据的是错误的功能,并且该结构是正确的。为什么会这样呢? 问题答案: 您必须将要封送的字段公开。像这样: 是因为所有的出口领域,在这种情况下有没有,是正确编组。 工作示例:https : //play.golang.o

  • 问题内容: http://play.golang.org/p/f6ilWnWTjm 我正在尝试解码以下字符串,但仅获取空值。 如何在Go中解码嵌套的JSON结构? 我想将以下内容转换为地图数据结构。 问题答案: 在Go中使用嵌套结构来匹配JSON中的嵌套结构。 这是一个如何处理示例JSON的示例: 游乐场链接 您还可以对内部结构使用匿名类型: 游乐场链接 或外部和内部结构: 游乐场链接 如果您不知

  • 我想得到一个表示 json 的字符串,如下所示: 并在其中包含一个“count”键,因此结尾如下: 这就是为什么我计划将其转换为 json,以便我可以添加计数,然后再次使其成为字符串。问题是我不知道该 JSON 的结构,所以我无法使用

  • 问题内容: 我想解组结构定义为: 使用似乎只对使用的,而忽略了场:https://play.golang.org/p/WUBfzpheMl 我有一个笨拙的解决方案,我可以手动设置该字段,但是我想知道是否有人可以使用一种更清洁或更简单的方法来进行设置。 谢谢! 问题答案: 发生这种情况是因为嵌入在中。这意味着当json库调用unmarshaler时,它最终以on调用了。 因此,在内部,参数包含整个j

  • 问题内容: 是否可以在不对原始类型进行硬编码的情况下将JSON解组到由反射构成的结构中? 在此示例中,我使用了强制转换。但是,如果我不知道类型怎么办? 当我仅用于解组时,该结构将被清零。 当我省略演员表时,我会得到一张地图。这是可以理解的 问题答案: 这里的问题是,如果您在此处省略类型断言: 该推断有型。 然后,当您将地址解组时,类型为(指向interface {}的指针),并且解组无法按预期工作

  • 问题内容: 我是初学者,尝试解组以下json字符串 这是结构 这是功能 该函数正在返回 问题答案: 您的JSON输入不是的一部分,因为还有另一个JSON对象包装器,并且值属于属性。 更深入地讲,是一个JSON数组,其中的对象持有不同的键,其值可由表示。 因此,要完全描述您的JSON,您需要某种“动态”类型。例如,地图就是这种动态类型。 因此,您的原始JSON输入可以使用类型完全建模。这是一张地图,