2014-12-17 2 views
1

Я нахожусь в процессе перехода от Python к GoLang, и я пытаюсь разглядеть тип данных. Мне нужно собрать карту для следующего JSON, но я не совсем уверен, как моя карта должна быть построена.Marshall MAP to JSON

Это то, что я пробовал, но его не работает для меня.

data := map[string]string{"Offset": "0", "Properties": map[string]string{"key": "Type", "value": "User"}, "Category": "all", "Locations": map[string]string{}, "Accounts": "100" } 
data_json, _ := json.Marshal(data) 
fmt.Println(string(data_json)) 

Желаемый результат:

{ 
"Locations": [], 
"Dates": [], 
"Properties": [ 
    { 
    "key": "Type", 
    "value": "User" 
    } 
], 
"Category": "all", 
"Accounts": [], 
"Offset": 0, 
"Limit": 100 
} 
+0

Является ли проблема, что ее не сортируют, как вы ожидаете, или ее просто не работают? Простой способ узнать, почему его не работает, было бы не игнорировать ошибку, прошедшую назад, и регистрировать ее, если ее не ноль. – Verran

ответ

4

Вопрос заключается в том, что вы требуя написать карту строк для строк (ключ представляет собой строку и значение является строкой). Но у вас есть пара ключей/значений: "Properties": map[string]string{"key": "Type", "value": "User"}, и это значение не является строкой, ее другой картой. Если вы определяете данные как карту строк для интерфейсов, она должна работать. Это будет выглядеть следующим образом:

data := map[string]interface{}{"Offset": "0", "Properties": map[string]string{"key": "Type", "value": "User"}, "Category": "all", "Locations": map[string]string{}, "Accounts": "100" } 

Вот рабочий пример: http://play.golang.org/p/HjHH463J_r

Если вы не знаете, какие интерфейсы и почему они работают, в документации объясняет это довольно хорошо.

+0

И просто имейте в виду, что json.Marshal в алфавитном порядке упорядочивает «ключи», поэтому в json-данных он сначала пойдет: «Учетные записи», затем «Категория» и т. Д. – kingSlayer

+0

Arr I see. Это действительно полезно спасибо. Я замечаю, что когда я запускаю это, ключ/значения для местоположений, дат, свойств и учетных записей завертываются в фигурные скобки, а не квадратные скобки. – user1513388

+0

Пакет будет отображать карты в фигурные скобки и фрагменты в квадратные скобки. Вот тот самый пример, когда «Locations» переключился на фрагмент строк: http://play.golang.org/p/X5o2FRUYx6 – Verran