2016-03-16 5 views
-2

У меня есть данные вроде '{"{\"hello\":\"world\"}"}', это массив json в postgresql.как я могу определить данные этого типа в golang

Я не знаю, как обращаться с ним в голанге. Я знаю, что можно определить с string затем использовать json.Unmarshal для SLOVE, но я хочу знать, если есть способ, чтобы получить его в struct

+1

Ваш json не представляет собой массив. Массивы в json обозначаются символом '[]'. Это просто структура с другой структурой внутри нее. – evanmcdonnal

+0

данные выглядят бегущей строки json с объектом для меня, а не массивом – Vasfed

ответ

0

Я предполагаю, что вы вывесили неправильный JSON и скажу это '{"hello": "world"} на структуру имеет предопределенные поля, и с помощью произвольного JSON, которого невозможно узнать заранее. Возможным решением было бы преобразование его в карту.

var data interface{} 
b := []byte(`{"hello": "world"}`) 
err := json.Unmarshal(b, &data) 
if err != nil { 
     panic(err) 
} 
fmt.Print(data) 

Когда вы распечатываете данные, вы, вероятно, получите что-то вроде. map[hello:world]

Который в форме map[string]interface{}.

Тогда вы можете использовать переключатель типа в петлю в структуру карты, пока не найдете тип assert все interface{}.

for k, v := range data.(map[string]interface{}) { 
     switch val := v.(type) { 
     case string: 
       v = val 
     default: 
       fmt.Println(k, "is unknown type") 
     } 
} 

Карта - идеальная структура данных при работе с произвольным входящим JSON. Однако, если JSON создается из таблицы SQL с предопределенными схемами, вы можете использовать структуру с той же структурой, а не с картой.

type Hello struct { 
     Hello string `json:"hello"` 
}