JsonObject *trg_prefs_new_profile(TrgPrefs * p) { JsonArray *profiles = trg_prefs_get_profiles(p); JsonObject *newp = trg_prefs_new_profile_object(); json_array_add_object_element(profiles, newp); return newp; }
void trg_prefs_load(TrgPrefs * p) { TrgPrefsPrivate *priv = p->priv; JsonParser *parser = json_parser_new(); JsonNode *root; guint n_profiles; JsonArray *profiles; gboolean parsed = json_parser_load_from_file(parser, priv->file, NULL); if (!parsed) { trg_prefs_empty_init(p); g_object_unref(parser); return; } root = json_parser_get_root(parser); if (root) { priv->user = json_node_copy(root); priv->userObj = json_node_get_object(priv->user); } g_object_unref(parser); if (!root) { trg_prefs_empty_init(p); return; } if (!json_object_has_member(priv->userObj, TRG_PREFS_KEY_PROFILES)) { profiles = json_array_new(); json_object_set_array_member(priv->userObj, TRG_PREFS_KEY_PROFILES, profiles); } else { profiles = json_object_get_array_member(priv->userObj, TRG_PREFS_KEY_PROFILES); } n_profiles = json_array_get_length(profiles); if (n_profiles < 1) { priv->profile = trg_prefs_new_profile_object(); json_array_add_object_element(profiles, priv->profile); trg_prefs_set_int(p, TRG_PREFS_KEY_PROFILE_ID, 0, TRG_PREFS_GLOBAL); } else { gint profile_id = trg_prefs_get_int(p, TRG_PREFS_KEY_PROFILE_ID, TRG_PREFS_GLOBAL); if (profile_id >= n_profiles) trg_prefs_set_int(p, TRG_PREFS_KEY_PROFILE_ID, profile_id = 0, TRG_PREFS_GLOBAL); priv->profile = json_array_get_object_element(profiles, profile_id); } }
void send_ports(Network *network, SoupWebsocketConnection *ws) { g_return_if_fail(network); g_return_if_fail(network->graph); GHashTableIter iter; gpointer key = NULL; gpointer value = NULL; JsonObject *payload = json_object_new(); json_object_set_string_member(payload, "graph", network->graph->id); // Inports JsonArray *inports = json_array_new(); json_object_set_array_member(payload, "inPorts", inports); g_hash_table_iter_init(&iter, network->graph->inports); while (g_hash_table_iter_next(&iter, &key, &value)) { const gchar *exported_port = (const gchar *)(key); JsonObject *port = json_object_new(); json_object_set_string_member(port, "id", exported_port); json_object_set_string_member(port, "type", "any"); // TODO: should be that of the target json_object_set_string_member(port, "description", ""); json_object_set_boolean_member(port, "addressable", FALSE); json_object_set_boolean_member(port, "required", FALSE); json_array_add_object_element(inports, port); } // Outports JsonArray *outports = json_array_new(); json_object_set_array_member(payload, "outPorts", outports); g_hash_table_iter_init(&iter, network->graph->outports); while (g_hash_table_iter_next(&iter, &key, &value)) { const gchar *exported_port = (const gchar *)(key); JsonObject *port = json_object_new(); json_object_set_string_member(port, "id", exported_port); json_object_set_string_member(port, "type", "any"); // TODO: should be that of the target json_object_set_string_member(port, "description", ""); json_object_set_boolean_member(port, "addressable", FALSE); json_object_set_boolean_member(port, "required", FALSE); json_array_add_object_element(outports, port); } send_response(ws, "runtime", "ports", payload); }
static void add_contact (JsonArray **arr, MuMsgContact *c) { JsonObject *cell; if (!*arr) *arr = json_array_new (); cell = json_object_new (); if (c->name) json_object_set_string_member (cell, "name", c->name); if (c->email) json_object_set_string_member (cell, "email", c->email); json_array_add_object_element (*arr, cell); /* consumes */ }
void trg_prefs_empty_init(TrgPrefs * p) { TrgPrefsPrivate *priv = p->priv; JsonArray *profiles = json_array_new(); priv->user = json_node_new(JSON_NODE_OBJECT); priv->userObj = json_object_new(); json_node_take_object(priv->user, priv->userObj); priv->profile = trg_prefs_new_profile_object(); json_array_add_object_element(profiles, priv->profile); json_object_set_array_member(priv->userObj, TRG_PREFS_KEY_PROFILES, profiles); json_object_set_int_member(priv->userObj, TRG_PREFS_KEY_PROFILE_ID, 0); }
/** * json_builder_begin_object: * @builder: a #JsonBuilder * * Opens a subobject inside the given @builder. When done adding members to * the subobject, json_builder_end_object() must be called. * * Can be called for first or only if the call is associated to an object member * or an array element. * * Return value: (transfer none): the #JsonBuilder, or %NULL if the call was inconsistent */ JsonBuilder * json_builder_begin_object (JsonBuilder *builder) { JsonObject *object; JsonBuilderState *state; JsonBuilderState *cur_state; g_return_val_if_fail (JSON_IS_BUILDER (builder), NULL); g_return_val_if_fail (builder->priv->root == NULL, NULL); g_return_val_if_fail (g_queue_is_empty (builder->priv->stack) || json_builder_is_valid_add_mode (builder), NULL); object = json_object_new (); cur_state = g_queue_peek_head (builder->priv->stack); if (cur_state) { switch (cur_state->mode) { case JSON_BUILDER_MODE_ARRAY: json_array_add_object_element (cur_state->data.array, json_object_ref (object)); break; case JSON_BUILDER_MODE_MEMBER: json_object_set_object_member (cur_state->data.object, cur_state->member_name, json_object_ref (object)); g_free (cur_state->member_name); cur_state->member_name = NULL; cur_state->mode = JSON_BUILDER_MODE_OBJECT; break; default: g_assert_not_reached (); } } state = g_slice_new (JsonBuilderState); state->data.object = object; state->member_name = NULL; state->mode = JSON_BUILDER_MODE_OBJECT; g_queue_push_head (builder->priv->stack, state); return builder; }
/* Export play list to a json object */ JsonArray *plist_export_to_json( plist_t *pl ) { JsonArray *js_plist = json_array_new(); for ( int i = 0; i < pl->m_len; i ++ ) { song_t *s = pl->m_list[i]; JsonObject *js_song = json_object_new(); json_object_set_string_member(js_song, "name", song_get_name(s)); json_object_set_int_member(js_song, "length", s->m_full_len); json_object_set_int_member(js_song, "start_time", s->m_start_time); json_object_set_int_member(js_song, "end_time", s->m_end_time); if (s->m_default_title) json_object_set_string_member(js_song, "title", s->m_default_title); if (s->m_info && (s->m_info->m_flags & SI_INITIALIZED)) { song_info_t *si = s->m_info; JsonObject *js_si = json_object_new(); json_object_set_string_member(js_si, "artist", si->m_artist); json_object_set_string_member(js_si, "name", si->m_name); json_object_set_string_member(js_si, "album", si->m_album); json_object_set_string_member(js_si, "year", si->m_year); json_object_set_string_member(js_si, "comments", si->m_comments); json_object_set_string_member(js_si, "track", si->m_track); if (si->m_own_data) json_object_set_string_member(js_si, "own_data", si->m_own_data); json_object_set_object_member(js_song, "song_info", js_si); if (s->m_flags & SONG_STATIC_INFO) json_object_set_int_member(js_song, "static_info", 1); } json_array_add_object_element(js_plist, js_song); } return js_plist; }
static void send_meta (CockpitInternalMetrics *self) { JsonArray *metrics; JsonObject *metric; JsonObject *root; struct timeval now_timeval; gint64 now; gettimeofday (&now_timeval, NULL); now = timestamp_from_timeval (&now_timeval); root = json_object_new (); json_object_set_int_member (root, "timestamp", now); json_object_set_int_member (root, "now", now); json_object_set_int_member (root, "interval", self->interval); metrics = json_array_new (); for (int i = 0; i < self->n_metrics; i++) { MetricInfo *info = &self->metrics[i]; metric = json_object_new (); /* Name and derivation mode */ json_object_set_string_member (metric, "name", info->desc->name); if (info->derive) json_object_set_string_member (metric, "derive", info->derive); /* Instances */ if (info->desc->instanced) { GHashTableIter iter; gpointer key, value; int index; JsonArray *instances = json_array_new (); g_hash_table_iter_init (&iter, info->instances); index = 0; while (g_hash_table_iter_next (&iter, &key, &value)) { const gchar *name = key; InstanceInfo *inst = value; /* HACK: We can't use json_builder_add_string_value here since it turns empty strings into 'null' values inside arrays. https://bugzilla.gnome.org/show_bug.cgi?id=730803 */ { JsonNode *string_element = json_node_alloc (); json_node_init_string (string_element, name); json_array_add_element (instances, string_element); } inst->index = index++; } json_object_set_array_member (metric, "instances", instances); } /* Units and semantics */ json_object_set_string_member (metric, "units", info->desc->units); json_object_set_string_member (metric, "semantics", info->desc->semantics); json_array_add_object_element (metrics, metric); } json_object_set_array_member (root, "metrics", metrics); cockpit_metrics_send_meta (COCKPIT_METRICS (self), root, FALSE); json_object_unref (root); }
GHashTable * cockpit_package_listing (JsonArray **json) { JsonArray *root = NULL; GHashTable *listing; CockpitPackage *package; GHashTable *ids; JsonObject *object; JsonArray *id; GList *names, *l; GList *packages; const gchar *name; JsonNode *node; JsonArray *array; guint i, length; listing = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, cockpit_package_unref); build_package_listing (listing); /* Add aliases to the listing */ packages = g_hash_table_get_values (listing); packages = g_list_sort (packages, compar_packages); g_list_foreach (packages, (GFunc)cockpit_package_ref, NULL); for (l = packages; l != NULL; l = g_list_next (l)) { package = l->data; node = json_object_get_member (package->manifest, "alias"); if (node) { /* * Process and remove "alias" from the manifest, as it results in * confusing and duplicated information for the front end. */ package->alias = node = json_node_copy (node); json_object_remove_member (package->manifest, "alias"); if (JSON_NODE_HOLDS_ARRAY (node)) { array = json_node_get_array (node); length = json_array_get_length (array); for (i = 0; i < length; i++) add_alias_to_listing (listing, package, json_array_get_element (array, i)); } else { add_alias_to_listing (listing, package, node); } } } g_list_free_full (packages, (GDestroyNotify)cockpit_package_unref); /* Now wrap up the checksums */ finish_checksums (listing); /* Add checksums to the listing */ packages = g_hash_table_get_values (listing); g_list_foreach (packages, (GFunc)cockpit_package_ref, NULL); for (l = packages; l != NULL; l = g_list_next (l)) { package = l->data; if (package->checksum && !g_hash_table_contains (listing, package->checksum)) { g_hash_table_replace (listing, package->checksum, cockpit_package_ref (package)); g_debug ("%s: package has checksum: %s", package->name, package->checksum); } } g_list_free_full (packages, (GDestroyNotify)cockpit_package_unref); /* Build JSON packages block */ if (json) { *json = root = json_array_new (); ids = g_hash_table_new (g_direct_hash, g_direct_equal); names = g_hash_table_get_keys (listing); names = g_list_sort (names, (GCompareFunc)strcmp); for (l = names; l != NULL; l = g_list_next (l)) { name = l->data; package = g_hash_table_lookup (listing, name); id = g_hash_table_lookup (ids, package); if (!id) { object = json_object_new (); id = json_array_new(); /* The actual package name always comes first */ json_object_set_array_member (object, "id", id); json_array_add_string_element (id, package->name); g_hash_table_insert (ids, package, id); json_object_set_object_member (object, "manifest", json_object_ref (package->manifest)); json_array_add_object_element (root, object); } /* Other ways to refer to the package */ if (!g_str_equal (name, package->name)) json_array_add_string_element (id, name); } g_list_free (names); g_hash_table_destroy (ids); } return listing; }
/* Params utils */ static gboolean melo_jsonrpc_add_node (JsonNode *node, JsonObject *schema, JsonObject *obj, JsonArray *array) { GType vtype = G_TYPE_INVALID; const gchar *s_name; const gchar *s_type; JsonNodeType type; /* Get name and type from schema */ s_name = json_object_get_string_member (schema, "name"); s_type = json_object_get_string_member (schema, "type"); if (!s_name || !s_type) return FALSE; /* Get type */ type = json_node_get_node_type (node); if (type == JSON_NODE_VALUE) vtype = json_node_get_value_type (node); /* Check type: * We check only first letter of the type string. */ switch (s_type[0]) { case 'b': /* Boolean: check type */ if (vtype != G_TYPE_BOOLEAN) return FALSE; /* Add to object / array */ if (obj || array) { gboolean v; v = json_node_get_boolean (node); if (obj) json_object_set_boolean_member (obj, s_name, v); else json_array_add_boolean_element (array, v); break; } break; case 'i': /* Integer: check type */ if (vtype != G_TYPE_INT64) return FALSE; /* Add to object / array */ if (obj || array) { gint64 v; v = json_node_get_int (node); if (obj) json_object_set_int_member (obj, s_name, v); else json_array_add_int_element (array, v); } break; case 'd': /* Double: check type */ if (vtype != G_TYPE_DOUBLE) return FALSE; /* Add to object / array */ if (obj || array) { gdouble v; v = json_node_get_double (node); if (obj) json_object_set_double_member (obj, s_name, v); else json_array_add_double_element (array, v); } break; case 's': /* String: check type */ if (vtype != G_TYPE_STRING) return FALSE; /* Add to object / array */ if (obj || array) { const gchar *v; v = json_node_get_string (node); if (obj) json_object_set_string_member (obj, s_name, v); else json_array_add_string_element (array, v); } break; case 'o': /* Object: check type */ if (type != JSON_NODE_OBJECT) return FALSE; /* Add to object / array */ if (obj || array) { JsonObject *v; v = json_node_dup_object (node); if (obj) json_object_set_object_member (obj, s_name, v); else json_array_add_object_element (array, v); } break; case 'a': /* Array: check type */ if (type != JSON_NODE_ARRAY) return FALSE; /* Add to object / array */ if (obj || array) { JsonArray *v; v = json_node_dup_array (node); if (obj) json_object_set_array_member (obj, s_name, v); else json_array_add_array_element (array, v); } break; default: return FALSE; } return TRUE; }
int main (int argc, char *argv[]) { GError *error = NULL; GOptionContext *context; JsonGenerator *gen; JsonNode *root; JsonObject *obj; JsonArray *array; int i; char *data; context = g_option_context_new ("- ISOM parsing test"); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_add_group (context, gst_init_get_option_group ()); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_print ("option parsing failed: %s", error->message); exit (1); } g_option_context_free (context); if (argc < 2) { g_print ("need filename\n"); exit (1); } array = json_array_new (); for (i = 1; i < argc; i++) { GssIsomParser *file; GssIsomTrack *video_track; GssIsomTrack *audio_track; JsonObject *object; JsonObject *o; gboolean ret; file = gss_isom_parser_new (); ret = gss_isom_parser_parse_file (file, argv[i]); if (!ret) { g_print ("parse failed"); continue; } video_track = gss_isom_movie_get_video_track (file->movie); audio_track = gss_isom_movie_get_audio_track (file->movie); object = json_object_new (); json_object_set_string_member (object, "filename", argv[i]); if (video_track) { char *codec; o = json_object_new (); json_object_set_int_member (o, "track_id", video_track->tkhd.track_id); json_object_set_int_member (o, "bitrate", video_track->esds.avg_bitrate); codec = g_strdup_printf ("avc1.%02x%02x%02x", video_track->esds.codec_data[1], video_track->esds.codec_data[2], video_track->esds.codec_data[3]); json_object_set_string_member (o, "codec", codec); g_free (codec); json_object_set_string_member (o, "iv", random_iv_string ()); json_object_set_object_member (object, "video", o); } if (audio_track) { o = json_object_new (); json_object_set_int_member (o, "track_id", audio_track->tkhd.track_id); json_object_set_int_member (o, "bitrate", audio_track->esds.avg_bitrate); json_object_set_string_member (o, "codec", "mp4a.40.2"); /* AAC LC */ json_object_set_string_member (o, "iv", random_iv_string ()); json_object_set_object_member (object, "audio", o); } json_array_add_object_element (array, object); gss_isom_parser_free (file); } obj = json_object_new (); json_object_set_int_member (obj, "version", 0); json_object_set_array_member (obj, "media", array); root = json_node_new (JSON_NODE_OBJECT); json_node_take_object (root, obj); gen = g_object_new (JSON_TYPE_GENERATOR, "root", root, "pretty", TRUE, "indent", 2, NULL); data = json_generator_to_data (gen, NULL); g_object_unref (gen); json_node_free (root); g_print ("%s\n", data); return 0; }