space2pacman
@space2pacman
Просто царь.

Почему теряются поля при конвертации?

Структура ответа map
map[
  /dbus-service:map[
    org.freedesktop.DBus.Introspectable:map[] 
    org.freedesktop.DBus.Peer:map[] 
    org.freedesktop.DBus.Properties:map[] 
    Basket:map[
      Fruit:"Apple"
    ]
  ]


При конвертации в json значение поле Fruit "теряется".

"/dbus-service":{
    "org.freedesktop.DBus.Introspectable":{},
    "org.freedesktop.DBus.Peer":{},
    "org.freedesktop.DBus.Properties":{},
    "Basket":
    {
      "Fruit":{}
    }
  }


Почему так?

Для вывода использую
fmt.Printf("%v", data)

jsonData, _ := json.Marshal(data)
fmt.Printf("json data: %s", jsonData)


UDP
Тип данных для Fruit: dbus.Variant

fmt.Println(reflect.TypeOf(data["/dbus-service"]["Basket"]["Fruit"])) // dbus.Variant

Библиотека для dbus: https://github.com/godbus/dbus
Судя по исходным кодам dbus.Variant - https://github.com/godbus/dbus/blob/76236955d466b0...

type Variant struct {
    sig   Signature
    value interface{}
}


UPD2
Доступ к данным доступен через Value()

reflect.TypeOf(data["/dbus-service"]["Basket"]["Fruit"] // "Apple"
reflect.TypeOf(data["/dbus-service"]["Basket"]["Fruit"].Value() // "Apple"
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
space2pacman
@space2pacman Автор вопроса
Просто царь.
Данные не пропадают. Они не Marshal'aлятся у Fruit:"Apple"
"Apple" - имеет тип данных dbus.Variant
У него нету "публичных" свойств. Не экспортируемых.

Экспортируемые пишутся с большой буквы.
Не экспортируемые с маленькой.

Решение: создавать новое дерево map'ов с примитивными данными (string вместо dbus.Variant) путем рекурсии.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы