试图找到一种简单的方法来编组/分解为以下结构
type Resource struct {
Data []ResourceData `json:"data"`
}
type ResourceData struct {
Id string `json:"id"`
Type string `json:"type"`
Attributes map[string]interface{} `json:"attributes"`
Relationships map[string]Resource `json:"relationships"`
}
r := Resource{}
json.Unmarshal(body, &r)
这在以下情况下很好:
body = `{"data":[{"id":"1","type":"blah"}]}`
但是我也需要它来回应:
body = `{"data":{"id":"1","type":"blah"}}` //notice no slice
我可以做一个单独的类型
type ResourceSingle struct {
Data ResourceData `json:"data"`
}
但是,这意味着需要复制我附加到资源的所有功能,这是可能的。但是,在执行它之前,我需要先找出要解组的类型,再加上关系部分,每个类型都可能包含data:[]
{}或data {},所以这个主意不会工作。
或者我可以使用
map[string]*json.RawMessage
//or
type Resource struct {
Data *json.RawMessage `json:"data"`
}
但是仍然,当以json形式时,我如何知道它是提供正确结构以解组的切片还是节点?
我的最后一招是将umarshal映射到map [string]接口并使用大量的反射测试..但这是漫长的尝试。
有想法吗?
亲切的问候
有很多方法可以构造它,但是最简单的技术归结为实现json.Unmarshaler
和检查数据类型。您可以最少地解析json字节,通常只是第一个字符,或者您可以尝试解组每种类型并返回成功的类型。
我们将在此处使用后一种技术,并将ResourceData插入切片中,而不管传入数据的格式如何,因此我们始终可以以相同的方式对其进行操作:
type Resource struct {
Data []ResourceData
}
func (r *Resource) UnmarshalJSON(b []byte) error {
// this gives us a temporary location to unmarshal into
m := struct {
DataSlice struct {
Data []ResourceData `json:"data"`
}
DataStruct struct {
Data ResourceData `json:"data"`
}
}{}
// try to unmarshal the data with a slice
err := json.Unmarshal(b, &m.DataSlice)
if err == nil {
log.Println("got slice")
r.Data = m.DataSlice.Data
return nil
} else if err, ok := err.(*json.UnmarshalTypeError); !ok {
// something besides a type error occurred
return err
}
// try to unmarshal the data with a struct
err = json.Unmarshal(b, &m.DataStruct)
if err != nil {
return err
}
log.Println("got struct")
r.Data = append(r.Data, m.DataStruct.Data)
return nil
}
http://play.golang.org/p/YIPeYv4AfT
问题内容: 我在解组JSON结构时遇到了麻烦: 我实际上需要结果中的第二个切片项。 我目前的尝试是 输出是这样的: 但是我也尝试使用这个: 输出正常: 我还可以引用Result [1]索引: 但是我无法将接口类型转换为任何其他匹配类型。谁能告诉我如何进行界面转换。哪种方法才是“最佳”。 问题答案: 一种选择是将顶级事物解组为最初的一部分。 然后遍历成员,并查看每个成员的第一个字符。如果它是一个对象
输入数据上有一个例子。 这是我在向服务器发出适当请求后收到的数据示例。我得到了这样的数据。如何序列化此类数据?由于嵌套结构列表的动态名称,我的尝试失败了。如何正确处理这种嵌套动态结构?
本文向大家介绍详解javascript数组去重问题,包括了详解javascript数组去重问题的使用技巧和注意事项,需要的朋友参考一下 首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据。遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复。于是乎,我写出了如下代码A: 写完之后,忽然想起来前几天刚看的ECMAScript 5中的数组方法indexOf 可以检索数组元素。于是我又
问题内容: 如何解析JSON ARRAY以获取没有[]和“”的数据 这是json 我的代码: 输出:[“ 23,Damansara-蒲种高速公路(Bandar Puchong Jaya)”,“ 47100 Puchong Batu Dua Belas,雪兰莪,”马来西亚“] 我只想要数据。如: 23,Damansara-Puchong Hwy(Bandar Puchong Jaya),47100
问题内容: 我有类似以下的输出: 我想获取每个城市的名称,该怎么办? 编辑: 上面的方法似乎无效,没有输出任何值。 问题答案: 也会在提取后为您解析JSON,因此从那时起,您将使用简单的Javascript数组(在JSON中标记为数组)。该文档还包含有关如何处理获取的数据的示例。 您可以使用for循环获取数组中的所有值: 检查您的控制台以查看输出(Chrome,Firefox / Firebug
问题内容: 嗨,我正在尝试从该 URL 解析json数组。json数组如下所示。 我在我的java类中这样做 但这不起作用,有人可以帮我解析我的json数组吗? 问题答案: 您将需要根据您在此处发布的用于解析为Json的字符串在当前代码中进行两次更改: 首先: 将方法的返回类型更改为并从中返回,而不是 例如: 第二: 更改代码以获取价值 :