我正在处理dbus响应,如下所示:
struct {
object path "/object/path"
array [
dict entry(
string "A"
variant string "a"
)
dict entry(
string "B"
variant array [
string "none"
]
)
dict entry(
string "C"
variant string "c"
)
]
}
我正在使用glib ver。 < 2.4我需要解析上面的结构。我已经尝试了几乎所有东西以创建一个GHashTable,但没有成功。 你能帮帮我吗?
提前致谢
答案 0 :(得分:0)
在程序中添加此解析器函数:
要传递的参数是解析器函数:
1st:Dictionary - a {sv}
2nd:map reference - 所以不需要在堆栈上创建map变量。
void recursive_parser(GVariant *arg_config, map<string, void *> &vec)
{
GVariantIter iter;
GVariant *child;
gchar *key;
g_variant_iter_init (&iter, arg_config);
while (g_variant_iter_next (&iter, "{sv}", &key, &child))
{
if(g_variant_is_container(child))
{
recursive_parser(child, vec);
}
else
{
if(g_variant_type_equal(g_variant_get_type(child),G_VARIANT_TYPE_STRING))
{
gchar *val = g_variant_get_string(child,NULL);
vec.insert(make_pair<string,void*>(key,val));
}
if(g_variant_type_equal(g_variant_get_type(child),G_VARIANT_TYPE_INT32))
{
gint32 *val = g_variant_get_int32(child);
vec.insert(make_pair<string,void*>(key,val));
}
}
}
}
此代码适用于偶数glib版本&lt; 2.4: - )