Returns detailed outline structure as :class:`django.http.JsonResponse`.

def return_json_response(self, context, **request_kwargs):
        '''
        Returns detailed outline structure as :class:`django.http.JsonResponse`.
        '''
        outline_dict = model_to_dict(self.object)
        logger.debug(str(outline_dict))
        logger.debug("Attepting to switch tags from queryset to name...")
        logger.debug(str(self.object.tags.names()))
        outline_dict.pop('tags')
        outline_dict['tags'] = list(self.object.tags.names())
        logger.debug(str(outline_dict))
        if self.object.series:
            outline_dict['series'] = model_to_dict(self.object.series)
            outline_dict['series']['tags'] = list(self.object.series.tags.names())
            logger.debug('Adding series... {}'.format(outline_dict['series']))
        if self.object.characterinstance_set.count():
            outline_dict['characters'] = []
            for cint in self.object.characterinstance_set.all():
                character_dict = model_to_dict(cint.character)
                character_dict['outline_key'] = cint.pk
                character_dict['tags'] = list(cint.character.tags.names())
                character_dict['role_properties'] = {
                    'main_character': cint.main_character,
                    'pov_character': cint.pov_character,
                    'protagonist': cint.protagonist,
                    'antagonist': cint.antagonist,
                    'villain': cint.villain,
                    'obstacle': cint.obstacle,
                }
                outline_dict['characters'].append(character_dict)
        if self.object.locationinstance_set.count():
            outline_dict['locations'] = []
            for lint in self.object.locationinstance_set.all():
                location_dict = model_to_dict(lint.location)
                location_dict['tags'] = list(lint.location.tags.names())
                location_dict['outline_key'] = lint.pk
                outline_dict['locations'].append(location_dict)
        if self.object.arc_set.count():
            outline_dict['arcs'] = []
            for arc in self.object.arc_set.all():
                arc_dict = model_to_dict(arc)
                arc_dict['nodes'] = ArcElementNode.dump_bulk(parent=arc.arc_root_node)
                outline_dict['arcs'].append(arc_dict)
        outline_dict['story_tree'] = StoryElementNode.dump_bulk(parent=self.object.story_tree_root)
        logger.debug("Sending response via JSON: {}".format(outline_dict))
        response = JsonResponse(outline_dict)
        response['Content-Disposition'] = 'attachment; filename="{}.json"'.format(slugify(self.object.title))
        return response