コード例 #1
0
ファイル: twitter-status.c プロジェクト: ak2consulting/tweet
static void
twitter_status_build (TwitterStatus *status,
                      JsonNode      *node)
{
  TwitterStatusPrivate *priv = status->priv;
  JsonObject *obj;
  JsonNode *member;

  if (!node || JSON_NODE_TYPE (node) != JSON_NODE_OBJECT)
    return;

  obj = json_node_get_object (node);

  member = json_object_get_member (obj, "user");
  if (member)
    {
      priv->user = twitter_user_new_from_node (member);
      g_object_ref_sink (priv->user);

      priv->user_changed_id = g_signal_connect (priv->user, "changed",
                                                G_CALLBACK (user_changed_cb),
                                                status);
    }

  member = json_object_get_member (obj, "source");
  if (member)
    priv->source = json_node_dup_string (member);

  member = json_object_get_member (obj, "created_at");
  if (member)
    priv->created_at = json_node_dup_string (member);

  member = json_object_get_member (obj, "id");
  if (member)
    priv->id = json_node_get_int (member);

  member = json_object_get_member (obj, "truncated");
  if (member)
    priv->truncated = json_node_get_boolean (member);

  member = json_object_get_member (obj, "text");
  if (member)
    priv->text = json_node_dup_string (member);

  member = json_object_get_member (obj, "in_reply_to_user_id");
  if (member)
    priv->in_reply_to_user_id = json_node_get_int (member);

  member = json_object_get_member (obj, "in_reply_to_status_id");
  if (member)
    priv->in_reply_to_status_id = json_node_get_int (member);
}
コード例 #2
0
/*!
 * Convert the specified \c JsonNode into a string.
 *
 * \param node \c JsonNode.
 * \return Newly-allocated string on success, else \c NULL.
 */
static gchar *
clr_oci_json_string (JsonNode* node) {
	gchar buffer[NODE_BUF_SIZE];
	GType valueType = json_node_get_value_type(node);

	switch (valueType) {
	case G_TYPE_STRING:
		return json_node_dup_string(node);

	case G_TYPE_DOUBLE:
	case G_TYPE_FLOAT:
		g_snprintf(buffer, NODE_BUF_SIZE, "%f", json_node_get_double(node));
		break;

	case G_TYPE_INT:
	case G_TYPE_INT64:
		g_snprintf(buffer, NODE_BUF_SIZE, "%ld", json_node_get_int(node));
		break;

	case G_TYPE_BOOLEAN:
		if (json_node_get_boolean(node)) {
			g_snprintf(buffer, NODE_BUF_SIZE, "%s", "true");
		} else {
			g_snprintf(buffer, NODE_BUF_SIZE, "%s", "false");
		}
		break;

	default:
		g_snprintf(buffer, NODE_BUF_SIZE, "%s", "Unknown type");
		break;
	}

	return g_strdup(buffer);
}
コード例 #3
0
GHashTable *
json_ghashtable_deserialize (JsonNode *node,
                             GError **error)
{
  GHashTable *table = NULL;
  GList *k;
  GList *keys;
  JsonNode *node_value;
  JsonObject *object;
  gchar *value;

  if (!node || !JSON_NODE_HOLDS_OBJECT (node)) {
    g_set_error_literal (error,
                         JSON_READER_ERROR,
                         JSON_READER_ERROR_NO_OBJECT,
                         "Expected JSON object");
    return table;
  }

  object = json_node_get_object (node);
  keys = json_object_get_members (object);
  table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);

  for (k = keys; k ; k = g_list_next (k)) {
    node_value = json_object_get_member (object, k->data);
    if (!JSON_NODE_HOLDS_VALUE (node_value) ||
        (value = json_node_dup_string (node_value)) == NULL) {
      g_set_error_literal (error,
                           JSON_READER_ERROR,
                           JSON_READER_ERROR_INVALID_TYPE,
                           "Expected JSON string");
      g_hash_table_unref (table);
      table = NULL;
      break;
    } else {
      g_hash_table_insert (table, g_strdup (k->data), value);
    }
  }

  g_list_free (keys);
  json_object_unref (object);

  return table;
}
コード例 #4
0
ファイル: main.c プロジェクト: fluffware/scratchx_PLC_S5
static gboolean
read_config_file(AppContext *app, GError **err)
{
  JsonNode *root;
  JsonParser *parser;
  parser = json_parser_new ();
  if (!json_parser_load_from_file (parser, app->config_filename, err)) {
    g_object_unref(parser);
    return FALSE;
  }
  root = json_parser_get_root(parser);
  if (JSON_NODE_HOLDS_OBJECT(root)) {
    JsonNode *value_node;
    JsonObject *root_obj = json_node_get_object(root);
    value_node = json_object_get_member(root_obj, "extensionPort");
    if (value_node && JSON_NODE_HOLDS_VALUE(value_node)) {
      app->http_port = json_node_get_int(value_node);
    }
    value_node = json_object_get_member(root_obj, "httpRootPath");
    if (value_node && JSON_NODE_HOLDS_VALUE(value_node)) {
      GFile *base;
      GFile *http_root;
      GFile *config;
      char *path = json_node_dup_string(value_node);
      config = g_file_new_for_path(app->config_filename);
      base = g_file_get_parent(config);
      g_object_unref(config);
      g_free(app->http_root);
      http_root = g_file_resolve_relative_path (base, path);
      g_free(path);
      g_object_unref(base);
      if (http_root) {
	app->http_root = g_file_get_path(http_root);
	g_debug("HTTP root: %s", app->http_root);
	g_object_unref(http_root);
      }
    }
  }
  g_object_unref(parser);
  return TRUE;
}
コード例 #5
0
ファイル: msg.c プロジェクト: foobarfighter/c-cometd-client
GList*
cometd_msg_supported_connection_types(JsonNode* node)
{
    g_return_val_if_fail(JSON_NODE_HOLDS_OBJECT (node), NULL);

    JsonObject* obj = json_node_get_object(node);
    JsonArray* arr = json_object_get_array_member(obj,
                     "supportedConnectionTypes");

    if (!arr)
        return NULL;

    GList *types = NULL, *ielem = NULL;
    GList* items = json_array_get_elements(arr);

    for (ielem = items; ielem; ielem = g_list_next(ielem))
        types = g_list_prepend(types, json_node_dup_string(ielem->data));

    types = g_list_reverse(types);

    g_list_free(items);

    return types;
}