Подскажите, пожалуйста, как правильно распарсить json на Golang. Желаемый ответ должен быть в виде total, page, products (картинка прикреплена), сейчас products пустой массив. Возвращаемый тип должен быть []map[string]interface{}? Как сделать так, чтобы было как здесь(Python):
total = result.get("query_total", [])
result = result.get("query", [])
if len(total) > 0:
total = total[0].get("total")
else:
total = -1
return JSONResponse(
content={"total": total, "page": page, "products": result},
status_code=status.HTTP_200_OK,
)
func (r NodesRepository) GetNodesByFilters(dgraphTypeName string, predicates map[string]string, edgeName string, offset int, page int) (map[string]interface{}, error) {
var filters []string
for filterObject, filterValue := range predicates {
filters = append(filters, fmt.Sprintf(`eq(%s, "%s")`, filterObject, filterValue))
}
filtersString := strings.Join(filters, " and ")
queryText := fmt.Sprintf(`
query node_type($node_type_name: string){
query_items (func: type($node_type_name)) @filter(%s) {
total: count(<~%s>)
items as <~%s> {}
}
query_total(func: uid(items)) @recurse(depth: 2) {
total: count(uid)
}
query(func: uid(items), first: 100, offset: %d)
@recurse(depth: 2) {
expand(_all_)
}
}
`, filtersString, edgeName, edgeName, page*100)
resp, err := r.Dg.NewReadOnlyTxn().QueryWithVars(context.TODO(), queryText, map[string]string{
"$node_type_name": dgraphTypeName,
})
if err != nil {
log.Println("error querying data:", err)
return nil, fmt.Errorf("failed to query data: %v", err)
}
parsedData := models.ParsedNodesFilters{Products: make([]map[string]interface{}, 0)}
// var parsedData models.ParsedNodesFilters
if err := json.Unmarshal(resp.Json, &parsedData); err != nil {
log.Println("error parsing JSON:", err)
return nil, fmt.Errorf("failed to parse JSON: %v", err)
}
total := -1
if parsedData.Total > 0 {
total = parsedData.Total
//total1 = strconv.Atoi(total)
}
// return parsedData.Products, nil
var (
response = map[string]interface{}{
"total": total,
"page": page,
"products": parsedData.Products,
}
)
return response, nil
}
type ParsedNodesFilters struct {
Total int `json:"total"`
Page int `json:"page"`
Products []map[string]interface{} `json:"query"`
}
Сейчас в ответе пустой массив products.