2015-01-23 5 views
-1

Я пытаюсь распаковать следующую строку JSON в ходу:

{"dt": {"$date": 1422019966844}, "_id": {"$oid": "54c24d7eabb7c06d4f000371"}} 

Я попробовал несколько различных способов распаковать это, но не мог найти способ, который работает. Каков идиоматический способ развязывания этого объекта?

Спасибо, Z.

ответ

1

Если вы знаете формат JSON вы получаете лучшее, что вы можете сделать, это создать с-структуру одинакового формата.

type MyJSON struct { 
    Dt struct { 
     Date int64 `json:"$date"` 
    } `json:"dt"` 
    Id struct { 
     Oid string `json:"$oid"` 
    } `json:"_id"` 
} 

http://play.golang.org/p/C2Bc7kf0B8

1

Вот один из способов распаковать в JSON Пойти:

d := []byte(`{"dt": {"$date": 1422019966844}, "_id": {"$oid": "54c24d7eabb7c06d4f000371"}}`) 
var v struct { 
    Dt struct { 
     Date int64 `json:"$date"` 
    } 
    ID struct { 
     OID string `json:"$oid"` 
    } `json:"_id"` 
} 
err := json.Unmarshal(d, &v) 

playground example

Вы, вероятно, хотите, чтобы распаковать на что-то вроде:

var v struct { 
    ID bson.ObjectID `bson:"_id"` 
    Dt time.Time 
} 

Я предлагаю unmarshalling оригинальный BSON вместо представления клиента Javascript BSON.

+0

вар v {структура ID bson.ObjectID 'BSON: "_ идентификатор"' Dt time.Time } идеально, что я хотел бы сделать, но есть способ сделать это, учитывая JSon строку I» м получить? –

+0

Нет прямого пути. Единственный вариант - размонтировать одну структуру и вручную скопировать в другую. Я попытался бы получить BSON напрямую и использовать маршалер BSON. –

Смежные вопросы