func parseCondition(v *jason.Object) (c *Condition, err error) { conds, err := v.Object() if conds == nil { fmt.Println("get conds failed") return nil, err } c = &Condition{} for ck, cv := range conds.Map() { ea := &[]Expression{} eo, err := cv.Object() if err != nil { // cv is value e := &Expression{} e.op = "$eq" switch cv.Interface().(type) { case []interface{}: e.value, _ = cv.Array() case bool: e.value, _ = cv.Boolean() case string: e.value, _ = cv.String() case json.Number: e.value, _ = cv.Number() default: continue /* e.value = cv.Interface() fmt.Println(cv, " unsupported type ", reflect.ValueOf(cv.Interface()).Type()) */ } *ea = append(*ea, *e) } else { // cv is a object i := 0 for ek, ev := range eo.Map() { e := &Expression{} e.op = ek switch ev.Interface().(type) { case []interface{}: e.value, _ = ev.Array() case bool: e.value, _ = ev.Boolean() case string: e.value, _ = ev.String() case json.Number: e.value, _ = ev.Number() default: continue /* e.value = ev.Interface() fmt.Println(ev, " unsupported type ", reflect.ValueOf(ev.Interface()).Type()) */ } *ea = append(*ea, *e) i += 1 } } (*c)[ck] = ea } return c, nil }