无法解码 JSON 响应

Posted

技术标签:

【中文标题】无法解码 JSON 响应【英文标题】:Unable to decode the JSON response 【发布时间】:2014-01-13 18:26:14 【问题描述】:

我从图形 api 得到以下响应


   "data": [
      
         "name": "Mohamed Galib",
         "id": "502008940"
      ,
      
         "name": "Mebin Joseph",
         "id": "503453614"
      ,
      
         "name": "Rohith Raveendranath",
         "id": "507482441"
      
   ],
   "paging": 
      "next": "https://some_url"
   

我有一个结构如下

type Item struct 
   Name, Id string

我想解析响应并获取一个 Item 数组,我该怎么做?

【问题讨论】:

【参考方案1】:

你需要像这样更新你的结构:

type Item struct 
   Name string `json:"name"`
   Id string   `json:"id"`

并添加一个结构来表示包装器:

type Data struct 
   Data []Item `json:"data"`

然后您可以使用json.Unmarshal 填充数据实例。

请参阅文档中的 example。

【讨论】:

另一种选择是让 JSON 和 Go 名称逐个字符匹配,但是在这种情况下,您无法控制 JSON 名称,因此您无法让您的Go 名称小写,否则 JSON API 将无法使用反射来访问它们,在这种情况下,这不是一个选项。 @dommage ,谢谢,我们不能不添加额外的结构数据吗?对于每个响应,我都必须添加一个这样的结构。 恐怕是这样。惯用的 Go 似乎涉及许多小类型定义。你习惯了:)

以上是关于无法解码 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 Alamofire 解码 json 时出错

如何使用具有数组的 2 个结构解码 JSON

json.loads 错误:“utf-8”编解码器无法解码位置 0 的字节 0x83:无效的起始字节

Swift Json 响应解码

response()->json 无法在 Laravel 中解码 [关闭]

解码 JSON 响应