使用Glib进行字典条目管理

时间:2015-09-28 08:25:14

标签: parsing hashtable glib

我正在处理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,但没有成功。 你能帮帮我吗?

提前致谢

1 个答案:

答案 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: - )