Fix items json decoding
This commit is contained in:
parent
94c953e391
commit
4b6c32b98c
|
@ -137,6 +137,23 @@ func JSONGetStreams(val *fastjson.Value, prop string) []ItemCollection {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func itemsFn(val *fastjson.Value) (Item, error) {
|
||||||
|
if val.Type() == fastjson.TypeArray {
|
||||||
|
it := val.GetArray()
|
||||||
|
if len(it) == 1 {
|
||||||
|
return itemFn(it[0])
|
||||||
|
}
|
||||||
|
items := make(ItemCollection, 0)
|
||||||
|
for _, v := range it {
|
||||||
|
if it, _ := itemFn(v); it != nil {
|
||||||
|
items.Append(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
return itemFn(val)
|
||||||
|
}
|
||||||
|
|
||||||
func itemFn(val *fastjson.Value) (Item, error) {
|
func itemFn(val *fastjson.Value) (Item, error) {
|
||||||
typ := JSONGetType(val)
|
typ := JSONGetType(val)
|
||||||
if typ == "" {
|
if typ == "" {
|
||||||
|
@ -227,17 +244,7 @@ func JSONUnmarshalToItem(val *fastjson.Value) Item {
|
||||||
)
|
)
|
||||||
switch val.Type() {
|
switch val.Type() {
|
||||||
case fastjson.TypeArray:
|
case fastjson.TypeArray:
|
||||||
arr := val.GetArray()
|
i, err = itemsFn(val)
|
||||||
if len(arr) == 1 {
|
|
||||||
i, _ = itemFn(arr[0])
|
|
||||||
}
|
|
||||||
items := make(ItemCollection, 0)
|
|
||||||
for _, v := range arr {
|
|
||||||
if it, _ := itemFn(v); it != nil {
|
|
||||||
items.Append(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i = items
|
|
||||||
case fastjson.TypeObject:
|
case fastjson.TypeObject:
|
||||||
i, err = itemFn(val)
|
i, err = itemFn(val)
|
||||||
case fastjson.TypeString:
|
case fastjson.TypeString:
|
||||||
|
@ -266,6 +273,9 @@ func asIRI(val *fastjson.Value) (IRI, bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func JSONGetItem(val *fastjson.Value, prop string) Item {
|
func JSONGetItem(val *fastjson.Value, prop string) Item {
|
||||||
|
if val == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if val = val.Get(prop); val == nil {
|
if val = val.Get(prop); val == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -276,9 +286,11 @@ func JSONGetItem(val *fastjson.Value, prop string) Item {
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
case fastjson.TypeArray:
|
case fastjson.TypeArray:
|
||||||
return JSONGetItems(val, prop)
|
it, _ := itemsFn(val)
|
||||||
|
return it
|
||||||
case fastjson.TypeObject:
|
case fastjson.TypeObject:
|
||||||
return JSONUnmarshalToItem(val)
|
it, _ := itemFn(val)
|
||||||
|
return it
|
||||||
case fastjson.TypeNumber:
|
case fastjson.TypeNumber:
|
||||||
fallthrough
|
fallthrough
|
||||||
case fastjson.TypeNull:
|
case fastjson.TypeNull:
|
||||||
|
@ -302,13 +314,9 @@ func JSONGetURIItem(val *fastjson.Value, prop string) Item {
|
||||||
return it
|
return it
|
||||||
}
|
}
|
||||||
case fastjson.TypeArray:
|
case fastjson.TypeArray:
|
||||||
it := make(ItemCollection, 0)
|
if it, _ := itemsFn(val); it != nil {
|
||||||
for _, val := range val.GetArray(prop) {
|
return it
|
||||||
if i, _ := itemFn(val); i != nil {
|
|
||||||
it.Append(i)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return it
|
|
||||||
case fastjson.TypeString:
|
case fastjson.TypeString:
|
||||||
return IRI(val.GetStringBytes())
|
return IRI(val.GetStringBytes())
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue