def dump_json_data(self, get_children=False):
        """
        Return a python dict representation of this page for use as part of
        a JSON export.
        """
        def content_langs_ordered():
            """
            Return a list of languages ordered by the page content
            with the latest creation date in each.  This will be used
            to maintain the state of the language_up_to_date template
            tag when a page is restored or imported into another site.
            """
            params = {'page': self}
            if self.freeze_date:
                params['creation_date__lte'] = self.freeze_date
            cqs = Content.objects.filter(**params)
            cqs = cqs.values('language').annotate(latest=Max('creation_date'))
            return [c['language'] for c in cqs.order_by('latest')]
        languages = content_langs_ordered()

        def language_content(ctype):
            return dict(
                (lang, self.get_content(lang, ctype, language_fallback=False))
                for lang in languages)

        def placeholder_content():
            """Return content of each placeholder in each language."""
            out = {}
            for p in get_placeholders(self.get_template()):
                if p.name in ('title', 'slug'):
                    continue  # these were already included
                out[p.name] = language_content(p.name)

            for p in Content.objects.filter(type__in=['meta_title', 'meta_description', 'meta_keywords', 'meta_author', 'fb_page_type', 'fb_image']):
                out[p.type] = language_content(p.type)
            return out

        def isoformat(d):
            return None if d is None else d.strftime(ISODATE_FORMAT)

        def custom_email(user):
            """Allow a user's profile to return an email for the user."""
            try:
                profile = user.get_profile()
            except (ObjectDoesNotExist, AttributeError):
                return user.email
            get_email = getattr(profile, 'get_email', None)
            return get_email() if get_email else user.email

        tags = [tag.name for tag in self.tags.all()]

        children = []
        if get_children:
            for c in self.children.filter(status__in=[self.PUBLISHED, self.HIDDEN]):
                children.append(c.dump_json_data())

        return {
            'complete_slug': dict(
                (lang, self.get_complete_slug(lang, hideroot=False))
                for lang in languages),
            'title': language_content('title'),
            'author_email': custom_email(self.author),
            'creation_date': isoformat(self.creation_date),
            'publication_date': isoformat(self.publication_date),
            'publication_end_date': isoformat(self.publication_end_date),
            'last_modification_date': isoformat(self.last_modification_date),
            'status': {
                Page.PUBLISHED: 'published',
                Page.HIDDEN: 'hidden',
                Page.DRAFT: 'draft'}[self.status],
            'template': self.template,
            'sites': (
                [site.domain for site in self.sites.all()]
                if settings.PAGE_USE_SITE_ID else []),
            'redirect_to_url': self.redirect_to_url,
            'redirect_to_complete_slug': dict(
                (lang, self.redirect_to.get_complete_slug(
                    lang, hideroot=False))
                for lang in self.redirect_to.get_languages()
                ) if self.redirect_to is not None else None,
            'content': placeholder_content(),
            'content_language_updated_order': languages,
            'tags': tags,
            'children': children
        }
Return a python dict representation of this page for use as part of
        a JSON export.