Search code examples
jsonglibvala

Access a dictionary with json-glib-1.0 in Vala?


I'm trying to access a json dict with json-glib but I can't figure out how to access it following Valadoc

I'm trying to access files, the dict looks like this:

"items": [
  {
   "kind": "webfonts#webfont",
   "family": "ABeeZee",
   "category": "sans-serif",
   "variants": [
    "regular",
    "italic"
   ],
   "subsets": [
    "latin"
   ],
   "version": "v12",
   "lastModified": "2019-04-29",
   "files": {
    "regular": "http://fonts.gstatic.com/s/abeezee/v12/esDR31xSG-6AGleN6tKukbcHCpE.ttf",
    "italic": "http://fonts.gstatic.com/s/abeezee/v12/esDT31xSG-6AGleN2tCklZUCGpG-GQ.ttf"
   }
  },

Someone can help?


Solution

  • You can use the deserialization features of GObject:

    public class Obj : Object {
        public string kind { get; set; }
        public string family { get; set; }
        public string category { get; set; }
        public string[] variants { get; set; }
        public int num { get; set; }
    
        public string to_string () {
            StringBuilder builder = new StringBuilder ();
            builder.append_printf ("kind = %s\n", kind);
            builder.append_printf ("family  = %s\n", family);
            builder.append_printf ("category = %s\n", category);
            builder.append_printf(@"variants:[\n");
    
            foreach (var item in variants) 
                builder.append_printf(@"\t$item\n");
    
            builder.append_printf(@"]\n");
    
            return (owned) builder.str;
        }
    }
    
    void main (string[] args) {
        string data = """
        {
          "kind" : "my string",
          "family"  : "ABeeZee",
          "category" : "sans-serif",
          "variants": [
            "regular",
            "italic"
          ]
        }""";
        var obj = Json.gobject_from_data (typeof (Obj), data) as Obj;
    
        print (@"$obj");
    }
    

    This will output:

    > vala console.vala --pkg json-glib-1.0
    kind = my string
    family  = ABeeZee
    category = sans-serif
    variants:[
            regular
            italic
    ]