func ParseJSONToQuadList(jsonBody []byte) (out []quad.Quad, _ error) { var quads []struct { Subject string `json:"subject"` Predicate string `json:"predicate"` Object string `json:"object"` Label string `json:"label"` } err := json.Unmarshal(jsonBody, &quads) if err != nil { return nil, err } out = make([]quad.Quad, 0, len(quads)) for i, jq := range quads { q := quad.Quad{ Subject: quad.StringToValue(jq.Subject), Predicate: quad.StringToValue(jq.Predicate), Object: quad.StringToValue(jq.Object), Label: quad.StringToValue(jq.Label), } if !q.IsValid() { return nil, fmt.Errorf("invalid quad at index %d. %s", i, q) } out = append(out, q) } return out, nil }
func toQuadValue(o interface{}) (quad.Value, bool) { var qv quad.Value switch v := o.(type) { case quadValue: qv = v.v case quad.Value: qv = v case string: qv = quad.StringToValue(v) case bool: qv = quad.Bool(v) case int: qv = quad.Int(v) case int64: qv = quad.Int(v) case float64: if float64(int(v)) == v { qv = quad.Int(int64(v)) } else { qv = quad.Float(v) } case time.Time: qv = quad.Time(v) default: return nil, false } return qv, true }