Почему теряются поля при конвертации?
Структура ответа map
map[ /dbus-service:map[ org.freedesktop.DBus.Introspectable:map[] org.freedesktop.DBus.Peer:map[] org.freedesktop.DBus.Properties:map[] Basket:map[ Fruit:"Apple" ] ] |
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":{} } } |
"/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) |
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{} } |
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"
Дополнительно:
Приведите код, который это делает, иначе очень сложно понять, что происходит
Какой тип у Fruit?
Внутри котрый value имеет interface
Я так понимаю что interface преобразуется в пустые фигурные скобки?
Есть структура с не экспортируемыми полями (приватными) в библиотеке dbus
Можно ли модифицировать или сделать обвязку сверху для этой структуры? Или как конвертировать с приватными полями?
Будет намного больше контроля и не будете полагаться на типы библиотеки, которые могут измениться
Структура внутри библиотеки.
Данные не пропадают. Они не Marshal'aлятся у Fruit:"Apple"
"Apple" - имеет тип данных dbus.Variant
У него нету "публичных" свойств. Не экспортируемых.
Экспортируемые пишутся с большой буквы.
Не экспортируемые с маленькой.
Решение: создавать новое дерево map'ов с примитивными данными (string вместо dbus.Variant) путем рекурсии.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
При конвертации поля могут теряться по разным причинам, и важно понять, какой именно процесс конвертации вы используете. В данном ответе я рассмотрю несколько распространенных причин потери полей при конвертации и предложу возможные решения.
1. Проблемы с кодировкой:
При конвертации текста между разными кодировками могут возникать проблемы с отображением специальных символов, включая пробелы и переводы строк. Убедитесь, что исходный текст и конечный формат имеют одинаковую кодировку, чтобы избежать потери данных.
// Пример кода на PHP для изменения кодировки $source_text = "Текст для конвертации"; $converted_text = iconv("UTF-8", "WINDOWS-1251", $source_text); echo $converted_text;
2. Неправильное форматирование:
Если вы конвертируете текст из одного формата в другой (например, из HTML в текстовый формат), убедитесь, что вы используете правильные методы для сохранения форматирования. Некоторые символы, такие как теги HTML, могут быть потеряны при неправильной конвертации.
// Пример кода на PHP для конвертации HTML в текст $html_text = "<p>Пример текста</p>"; $text_only = strip_tags($html_text); echo $text_only;
3. Ошибка в алгоритме конвертации:
Если вы используете собственный алгоритм конвертации, возможно, в нем есть ошибка, которая приводит к потере данных. Проверьте ваш код на наличие ошибок и убедитесь, что он правильно обрабатывает все символы и форматирование.
// Пример собственного алгоритма конвертации function custom_convert($input_text) { // Ваш код конвертации здесь return $converted_text; } $input_text = "Текст для конвертации"; $converted_text = custom_convert($input_text); echo $converted_text;
В завершение, при конвертации текста важно следить за каждым шагом процесса и проверять результаты, чтобы избежать потери данных. Обратите внимание на кодировку, форматирование и правильность алгоритма конвертации, чтобы сохранить все поля и данные при конвертации.