Exemplo n.º 1
0
int parse_playlist(struct playlist * list, char * plain_json) {
	json_value * playlist, * track_array, * track, * extension;
	unsigned n;

	assert(list != NULL);
	assert(plain_json != NULL);

	playlist = json_parse(plain_json);

	assert(playlist != NULL);

	track_array = json_query(playlist, "playlist", "trackList", "track", NULL);

	assert(track_array != NULL);

	for(n = 0; n < track_array->u.array.length; ++n) {
		struct tracknode * node = NULL;
		char * duration;

		node = malloc(sizeof(struct tracknode));
		assert(node != NULL);

		memset(node, 0, sizeof(struct tracknode));


		track = track_array->u.array.values[n];
		extension = json_query(track, "extension", NULL);

		json_hash(track, & node->track, NULL);
		json_hash(extension, & node->track, NULL);

		if((duration = strdup(value(& node->track, "duration"))) != NULL) {
			duration[strlen(duration) - 3] = 0;
			set(& node->track, "duration", duration);
			free(duration);
		}

		if(list->title) {
			trim(list->title);

			set(& node->track, "station", list->title);
		}
		else {
			set(& node->track, "station", "Unknown Station");
		}

		push(list, node);

		debug("track location: %s\n", value(& node->track, "location"));
	}

	json_value_free(playlist);

	return 1;
}
Exemplo n.º 2
0
pg::JsonToken JsonParser::query(const pg::JsonToken& token, const char* q) const {
    return pg::JsonToken(json_query(token.token_, token.token_->sub, q));
}
Exemplo n.º 3
0
pg::JsonToken JsonParser::query(const char* q) const {
    return pg::JsonToken(json_query(tokens_, numTokens_, q));
}