Я пытаюсь создать карту ключевых значений, а затем json.Marshal перед отправкой HTTP-запроса в Go/Golang.
jsonData
{"name":"bob",
"stream":"science",
"grades":[{"maths" :"A+",
"science" :"A"}]
}
Структура карты похожа на то, что у нее есть ключи строкового типа, а значения - это строки и срез, а сам срез имеет карту. Итак, с точки зрения python, я хочу создать словарь, в котором есть пары значений ключа, но значение последнего ключа представляет собой список, а в списке есть словарь.
часть кода такова:
postBody, err := json.Marshal(map[string]interface{}{
"name":name,
"stream":stream,
"grades":[{sub1 :sub1_score,
sub2 :sub2_score}]
})
но не удалось сделать такую сложную карту.
Go — статически типизированный язык.
Пустой интерфейс может содержать значения любого типа. Но ваш вложенный список не имеет типа.
[{sub1 :sub1_score, sub2 :sub2_score}]
[]map[string]interface{}{
{
sub1: sub1_score,
sub2: sub2_score,
},
}
postBody, err := json.Marshal(map[string]interface{}{
"name": name,
"stream": stream,
"grades": []map[string]interface{}{{
sub1: sub1_score,
sub2: sub2_score,
}},
})
или, если вы хотите избежать повторного ввода map[string]interface{}
type Obj map[string]any
postBody, err := json.Marshal(Obj{
"name": name,
"stream": stream,
"grades": []Obj{{
sub1: sub1_score,
sub2: sub2_score,
}},
})