将包含字符串、整数和数组的JSON对象解析为映射。

huangapple go评论122阅读模式
英文:

Unmarshal JSON object of strings, ints and arrays into a map

问题

我喜欢使用Decode()函数来解析JSON字符串:

  1. var message Message
  2. decoder := json.NewDecoder(s)
  3. err = decoder.Decode(&message)

我的数据结构是:

  1. type Message map[string]interface{}

测试数据如下:

  1. {
  2. "names": [
  3. "HINDERNIS",
  4. "TROCKNET",
  5. "UMGEBENDEN"
  6. ],
  7. "id": 1189,
  8. "command": "checkNames"
  9. }

对于数字和字符串,它可以正常工作,但是对于字符串数组,我得到以下错误:

  1. panic: interface conversion: interface is []interface {}, not []string
英文:

I like to unmarshal a JSON string using Decode():

  1. var message Message
  2. decoder := json.NewDecoder(s)
  3. err = decoder.Decode(&message)

My data structure is

  1. type Message map[string]interface{}

The test data is as follows:

  1. {
  2. "names": [
  3. "HINDERNIS",
  4. "TROCKNET",
  5. "UMGEBENDEN"
  6. ],
  7. "id":1189,
  8. "command":"checkNames"
  9. }

It's working fine for numbers and strings, but with the string array I get following panic:

  1. panic: interface conversion: interface is []interface {}, not []string

答案1

得分: 2

这是因为无法通过转换实现,因为一个结构体切片与它实现的接口切片不相等。你可以逐个获取元素并将它们放入[]string中,像这样:http://play.golang.org/p/1yqScF9yVX

或者更好的方法是,使用json包的功能来解包你的模型格式数据:http://golang.org/pkg/encoding/json/#example_Unmarshal

英文:

this is not possible by conversion because a slice of struct != slice of interface it implements!
either you can get the elements one by one and put them into a []string like this: http://play.golang.org/p/1yqScF9yVX

or better, use the capabilities of the json package to unpack the data in your model format : http://golang.org/pkg/encoding/json/#example_Unmarshal

huangapple
  • 本文由 发表于 2015年8月9日 22:00:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/31905043.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定