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; }
pg::JsonToken JsonParser::query(const pg::JsonToken& token, const char* q) const { return pg::JsonToken(json_query(token.token_, token.token_->sub, q)); }
pg::JsonToken JsonParser::query(const char* q) const { return pg::JsonToken(json_query(tokens_, numTokens_, q)); }