JSON to CSV Converter

Upload JSON file
 .json / .zip up to 1 MB (50 MB PRO)

Use this tool to convert JSON into CSV (Comma Separated Values) for Excel

  1. Upload your JSON text, file or URL into this online converter
  2. (Press the cog button on the right for advanced settings)
  3. Download the resulting CSV file when prompted
  4. Open your CSV file in Excel, Google Sheets, or another spreadsheet app
' + '
' + escapeHtml(liveConfig.subCopy) + '
' + '
' + escapeHtml(liveConfig.hint) + '
' + ''; } else { comingSoonMessage.innerHTML = '
' + escapeHtml(connectorLabel) + ' is ready now.
' + '
' + escapeHtml(liveConfig.subCopy) + '
' + '' + '
' + escapeHtml(liveConfig.hint) + '
' + ''; } comingSoonMessage.style.display = 'block'; } function dispatchConnectorInputConversion(textArea) { return new Promise(function (resolve, reject) { var startedAt = Date.now(); var maxWaitMs = 9000; function hasBoundTextAreaHandlers() { if (!window.jQuery || typeof window.jQuery._data !== 'function') { return false; } var events = window.jQuery._data(textArea, 'events'); if (!events) { return false; } var keyupCount = events.keyup && events.keyup.length ? events.keyup.length : 0; var pasteCount = events.paste && events.paste.length ? events.paste.length : 0; var inputCount = events.input && events.input.length ? events.input.length : 0; return (keyupCount + pasteCount + inputCount) > 0; } function triggerTextEvents() { if (!window.jQuery || !window.jQuery.fn || !textArea) { return false; } try { var jqTextArea = window.jQuery(textArea); jqTextArea.trigger('paste'); jqTextArea.trigger('keyup'); jqTextArea.trigger('input'); } catch (jqErr) { return false; } try { textArea.dispatchEvent(new Event('input', { bubbles: true })); } catch (nativeErr) { } return true; } function tryDispatch() { if (typeof window.processJSON === 'function') { window.processJSON(true); resolve(); return; } if (window.jQuery && window.jQuery.fn) { var triggered = triggerTextEvents(); if (triggered) { if (typeof window.jQuery._data !== 'function' || hasBoundTextAreaHandlers()) { resolve(); return; } } } if ((Date.now() - startedAt) >= maxWaitMs) { reject(new Error('Converter took too long to initialize.')); return; } window.setTimeout(tryDispatch, 120); } tryDispatch(); }); } function triggerLiveConnectorImport(connector) { if (!connector || !isLiveConnector(connector)) { return; } if (!comingSoonMessage) { return; } var liveConfig = getLiveConnectorConfig(connector); if (liveConfig.flowType === 'oauth-popup') { setLiveConnectorStatus('Opening Facebook sign-in in a new tab...', false); try { window.open(liveConfig.oauthStartUrl, 'fb_oauth', 'width=600,height=720'); } catch (popupErr) { setLiveConnectorStatus('Could not open the Facebook sign-in window. Check your popup blocker.', true); } // TODO(v1.1): after postMessage 'facebook-connected' arrives, render a // Page picker + "Fetch Posts" / "Fetch Insights" buttons that hit // /facebook/fetch-posts and /facebook/fetch-insights. return; } var urlInput = comingSoonMessage.querySelector('.connect-live-url'); if (!urlInput) { renderLiveConnectorPanel(connector); urlInput = comingSoonMessage.querySelector('.connect-live-url'); } var normalized = normalizeLiveConnectorImportUrl(connector, urlInput ? urlInput.value : ''); if (!normalized.ok) { setLiveConnectorStatus(normalized.message, true); if (urlInput) { urlInput.focus(); } return; } var textArea = document.getElementById('txtJSON'); if (!textArea) { setLiveConnectorStatus('Could not find the converter input box on this page.', true); return; } continueButton.disabled = true; continueButton.textContent = 'Importing...'; setLiveConnectorStatus('Starting import...', false); textArea.value = normalized.url; if (window.jQuery && jQuery(modalSelector).length) { jQuery(modalSelector).modal('hide'); } dispatchConnectorInputConversion(textArea).catch(function (importError) { continueButton.disabled = false; continueButton.textContent = liveConfig.buttonLabel; setLiveConnectorStatus('Could not start the import. Please try again.', true); if (window.console && typeof window.console.error === 'function') { window.console.error(importError); } }); } function renderConnectorGuidance(connector) { if (!connector || !oauthNote || !oauthPoints) { return; } if (isLiveConnector(connector)) { var liveConfig = getLiveConnectorConfig(connector); oauthNote.innerHTML = liveConfig.oauthNoteHtml; oauthPoints.innerHTML = liveConfig.oauthPointsHtml; return; } if (connector.connectionType === 'file') { oauthNote.innerHTML = 'We will connect to ' + escapeHtml(connector.platform) + ' and access a file path or folder that you choose.'; oauthPoints.innerHTML = '
  • Step 1: Sign in or provide server credentials
  • ' + '
  • Step 2: Choose a file, folder, or filename pattern
  • ' + '
  • Step 3: Confirm file format and start importing
  • '; return; } oauthNote.innerHTML = 'You will go to ' + escapeHtml(connector.platform) + ' to sign in and allow API access.'; oauthPoints.innerHTML = '
  • Step 1: Sign in to your account
  • ' + '
  • Step 2: Confirm access
  • ' + '
  • Step 3: Return here and start importing
  • '; } function showConnectorLoadState(message, includeRetryButton) { if (platformList) { platformList.innerHTML = ''; } if (!emptyState) { return; } var safeMessage = escapeHtml(message || 'Loading connector library...'); emptyState.innerHTML = '
    ' + safeMessage + '
    '; if (includeRetryButton) { emptyState.innerHTML += ''; } emptyState.style.display = 'block'; } function rebuildConnectorMap() { connectorMap = {}; connectors.forEach(function (connector) { if (connector && connector.id) { connectorMap[connector.id] = connector; } }); } function ensureConnectorCatalogLoaded() { if (connectorCatalogLoaded) { return Promise.resolve(); } if (connectorCatalogLoadPromise) { return connectorCatalogLoadPromise; } showConnectorLoadState('Loading connector library...', false); var loadRequest = new Promise(function (resolve, reject) { function loadCandidate(index) { if (index >= connectorCatalogCandidateUrls.length) { reject(new Error('Could not load connector catalog.')); return; } fetch(connectorCatalogCandidateUrls[index], { method: 'GET', credentials: 'same-origin', headers: { 'Accept': 'application/json' } }).then(function (httpResponse) { if (httpResponse.status === 404) { loadCandidate(index + 1); return null; } if (!httpResponse.ok) { throw new Error('Could not load connector catalog (HTTP ' + httpResponse.status + ').'); } return httpResponse.json(); }).then(function (response) { if (response === null) { return; } if (!response || response.success !== true || !Array.isArray(response.connectors)) { loadCandidate(index + 1); return; } connectors = response.connectors.map(function (connector, connectorIndex) { if (!connector || typeof connector !== 'object') { return connector; } connector.displayOrder = connectorIndex; return connector; }); rebuildConnectorMap(); connectorCatalogLoaded = true; if (libraryCount) { libraryCount.textContent = 'Connector library (' + connectors.length + ')'; } resolve(); }).catch(function () { loadCandidate(index + 1); }); } loadCandidate(0); }); connectorCatalogLoadPromise = loadRequest .then(function () { connectorCatalogLoadPromise = null; }) .catch(function (error) { connectorCatalogLoadPromise = null; throw error; }); return connectorCatalogLoadPromise; } function setConnectMode(mode) { selectedConnectMode = mode || 'all'; Array.prototype.forEach.call(modeButtons, function (button) { var isSelected = button.getAttribute('data-connect-mode') === selectedConnectMode; button.classList.toggle('is-selected', isSelected); button.setAttribute('aria-pressed', isSelected ? 'true' : 'false'); }); } function resetSelectedConnectorState() { selectedConnectorId = ''; selectedTitle.textContent = 'Choose a connector'; selectedExample.textContent = 'Select any connector to continue.'; oauthNote.textContent = 'Choose a connector to see setup steps.'; oauthPoints.innerHTML = '
  • Step 1: Select a connector
  • ' + '
  • Step 2: Review setup details
  • ' + '
  • Step 3: Continue when ready
  • '; continueButton.disabled = true; continueButton.textContent = 'Continue'; if (comingSoonMessage) { setConnectorPanelVariant(false); comingSoonMessage.style.display = 'none'; comingSoonMessage.innerHTML = ''; } } function setSelectedConnector(connector) { if (!connector) { return; } selectedConnectorId = connector.id; selectedTitle.textContent = connector.label; selectedExample.textContent = connector.example; renderConnectorGuidance(connector); continueButton.disabled = false; if (isLiveConnector(connector)) { continueButton.textContent = getLiveConnectorConfig(connector).buttonLabel; renderLiveConnectorPanel(connector); return; } continueButton.textContent = connector.connectionType === 'file' ? 'Continue to ' + connector.platform : 'Continue with ' + connector.platform; if (comingSoonMessage) { setConnectorPanelVariant(false); comingSoonMessage.innerHTML = '
    ' + escapeHtml(connector.label) + ' is coming soon.
    ' + '
    Need this sooner? Request 24-hour fast-track.
    ' + '' + ''; comingSoonMessage.style.display = 'block'; } } function getConnectorPriority(connector) { if (!connector) { return 0; } var labelKey = String(connector.label || '').toLowerCase(); if (Object.prototype.hasOwnProperty.call(connectorPriorityByLabel, labelKey)) { return connectorPriorityByLabel[labelKey]; } var platformKey = String(connector.platform || '').toLowerCase(); if (Object.prototype.hasOwnProperty.call(connectorPriorityByPlatform, platformKey)) { return connectorPriorityByPlatform[platformKey]; } return 0; } function renderConnectors(query) { activeSearch = (query || '').trim().toLowerCase(); var filtered = connectors.filter(function (connector) { if (selectedConnectMode !== 'all' && connector.connectionType !== selectedConnectMode) { return false; } var platformKey = String(connector.platform || '').toLowerCase(); if (platformKey === 'dropbox' && !activeSearch) { return false; } if (!activeSearch) { return true; } var haystack = ( connector.platform + ' ' + connector.dataType + ' ' + connector.label + ' ' + connector.example + ' ' + connector.connectionLabel + ' ' + connector.category ).toLowerCase(); return haystack.indexOf(activeSearch) !== -1; }); filtered.sort(function (left, right) { var leftPriority = getConnectorPriority(left); var rightPriority = getConnectorPriority(right); if (leftPriority !== rightPriority) { return leftPriority - rightPriority; } var leftOrder = typeof left.displayOrder === 'number' ? left.displayOrder : Number.MAX_SAFE_INTEGER; var rightOrder = typeof right.displayOrder === 'number' ? right.displayOrder : Number.MAX_SAFE_INTEGER; return leftOrder - rightOrder; }); var hasVisibleSelection = filtered.some(function (connector) { return connector.id === selectedConnectorId; }); if (!hasVisibleSelection) { if (filtered.length) { setSelectedConnector(filtered[0]); } else { resetSelectedConnectorState(); } } platformList.innerHTML = filtered.map(function (connector) { var selectedClass = connector.id === selectedConnectorId ? ' is-selected' : ''; var isLive = isLiveConnector(connector); var badgeClass = isLive ? 'connect-ready-badge' : 'connect-coming-badge'; var badgeLabel = isLive ? 'Ready now' : 'Coming soon'; return ''; }).join(''); if (emptyState) { if (filtered.length) { emptyState.style.display = 'none'; emptyState.innerHTML = ''; } else { if (activeSearch) { emptyState.innerHTML = '
    No connectors match your search.
    ' + ''; } else { emptyState.textContent = 'No connectors match your search.'; } emptyState.style.display = 'block'; } } } platformList.addEventListener('click', function (event) { var option = event.target.closest('.connect-option'); if (!option) { return; } var connector = connectorMap[option.getAttribute('data-connector-id')]; if (!connector) { return; } setSelectedConnector(connector); renderConnectors(activeSearch); }); function setNotifyStatus(message, isError) { if (!notifyStatus) { return; } if (!message) { notifyStatus.textContent = ''; notifyStatus.style.display = 'none'; notifyStatus.classList.remove('is-error'); return; } notifyStatus.textContent = message; notifyStatus.style.display = 'block'; notifyStatus.classList.toggle('is-error', !!isError); } continueButton.addEventListener('click', function () { var connector = connectorMap[selectedConnectorId]; if (!connector) { return; } if (isLiveConnector(connector)) { triggerLiveConnectorImport(connector); return; } if (comingSoonMessage) { setConnectorPanelVariant(false); comingSoonMessage.innerHTML = '
    ' + escapeHtml(connector.label) + ' is coming soon.
    ' + '
    Need this sooner? Request 24-hour fast-track.
    ' + '' + ''; comingSoonMessage.style.display = 'block'; } }); if (comingSoonMessage) { comingSoonMessage.addEventListener('click', function (event) { var requestButton = event.target.closest('[data-role="connect-request-24h"]'); if (requestButton) { var connector = connectorMap[selectedConnectorId]; var connectorLabel = connector ? connector.label : 'this connector'; var message = 'Please fast-track this connector: ' + connectorLabel + '. Please target completion within 24 hours.'; openContactModal(message); return; } var upvoteButton = event.target.closest('[data-role="connect-upvote"]'); if (upvoteButton) { var connector = connectorMap[selectedConnectorId]; var connectorLabel = connector ? connector.label : 'this connector'; upvoteButton.disabled = true; upvoteButton.innerHTML = ' Sending...'; jQuery.ajax({ type: 'POST', url: upvoteConnectorUrl, dataType: 'json', data: { connectorLabel: connectorLabel } }).always(function () { comingSoonMessage.innerHTML = '
    Thanks for your vote!
    ' + '
    Want to know when ' + escapeHtml(connectorLabel) + ' is ready?
    ' + '
    ' + '' + '' + '
    ' + ''; }); return; } var notifySubmit = event.target.closest('.connect-upvote-notify-submit'); if (notifySubmit) { var connector = connectorMap[selectedConnectorId]; var connectorLabel = connector ? connector.label : 'this connector'; var emailField = comingSoonMessage.querySelector('.connect-upvote-email'); var statusEl = comingSoonMessage.querySelector('.connect-upvote-notify-status'); var email = emailField ? String(emailField.value || '').trim() : ''; if (!email) { statusEl.textContent = 'Enter your email address.'; statusEl.className = 'connect-upvote-notify-status is-error'; statusEl.style.display = 'block'; return; } if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) { statusEl.textContent = 'Enter a valid email address.'; statusEl.className = 'connect-upvote-notify-status is-error'; statusEl.style.display = 'block'; return; } notifySubmit.disabled = true; notifySubmit.textContent = 'Sending...'; statusEl.style.display = 'none'; jQuery.ajax({ type: 'POST', url: sendContactMessageUrl, dataType: 'json', data: { email: email, message: 'Notify me when this connector is ready: ' + connectorLabel, source: 'connector-upvote' } }).done(function (response) { if (response && response.success) { comingSoonMessage.innerHTML = '
    You\'re all set!
    ' + '
    We\'ll email you when ' + escapeHtml(connectorLabel) + ' is ready.
    '; return; } statusEl.textContent = (response && response.message) ? response.message : 'Could not submit right now.'; statusEl.className = 'connect-upvote-notify-status is-error'; statusEl.style.display = 'block'; notifySubmit.disabled = false; notifySubmit.textContent = 'Notify me'; }).fail(function () { statusEl.textContent = 'Could not submit right now.'; statusEl.className = 'connect-upvote-notify-status is-error'; statusEl.style.display = 'block'; notifySubmit.disabled = false; notifySubmit.textContent = 'Notify me'; }); return; } }); comingSoonMessage.addEventListener('keydown', function (event) { if (event.key === 'Enter' && event.target && event.target.classList && event.target.classList.contains('connect-live-url')) { event.preventDefault(); continueButton.click(); return; } if (event.key === 'Enter' && event.target.closest('.connect-upvote-email')) { var submitBtn = comingSoonMessage.querySelector('.connect-upvote-notify-submit'); if (submitBtn) { event.preventDefault(); submitBtn.click(); } } }); } if (notifySubmitButton) { notifySubmitButton.addEventListener('click', function () { var connector = connectorMap[selectedConnectorId]; var connectorLabel = connector ? connector.label : ''; var email = notifyEmailInput ? String(notifyEmailInput.value || '').trim() : ''; if (!email) { setNotifyStatus('Enter your email address.', true); return; } if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) { setNotifyStatus('Enter a valid email address.', true); return; } notifySubmitButton.disabled = true; notifySubmitButton.textContent = 'Sending...'; setNotifyStatus('', false); jQuery.ajax({ type: 'POST', url: requestConnectorAccessUrl, dataType: 'json', data: { email: email, connectorLabel: connectorLabel } }).done(function (response) { if (response && response.success) { setNotifyStatus('Thanks. We will notify you when this connector is ready.', false); notifySubmitButton.textContent = 'Sent'; setTimeout(function () { if (window.jQuery && jQuery(notifyModalSelector).length) { jQuery(notifyModalSelector).modal('hide'); } }, 1100); return; } setNotifyStatus((response && response.message) ? response.message : 'Could not submit your request right now.', true); notifySubmitButton.disabled = false; notifySubmitButton.textContent = 'Send'; }).fail(function () { setNotifyStatus('Could not submit your request right now.', true); notifySubmitButton.disabled = false; notifySubmitButton.textContent = 'Send'; }); }); } if (notifyEmailInput) { notifyEmailInput.addEventListener('keydown', function (event) { if (event.key === 'Enter' && notifySubmitButton) { event.preventDefault(); notifySubmitButton.click(); } }); } function setContactStatus(message, isError) { if (!contactStatus) { return; } if (!message) { contactStatus.textContent = ''; contactStatus.style.display = 'none'; contactStatus.classList.remove('is-error'); return; } contactStatus.textContent = message; contactStatus.style.display = 'block'; contactStatus.classList.toggle('is-error', !!isError); } function openContactModal(defaultMessage, defaultEmailFromQuery) { if (!contactEmailInput || !contactMessageInput || !window.jQuery || !jQuery(contactModalSelector).length) { return; } var defaultEmail = ''; if (defaultEmailFromQuery) { defaultEmail = String(defaultEmailFromQuery).trim(); } else if (emailInput && emailInput.value) { defaultEmail = String(emailInput.value).trim(); } contactEmailInput.value = defaultEmail; contactMessageInput.value = defaultMessage || ''; if (contactFileInput) { contactFileInput.value = ''; } if (contactSubmitButton) { contactSubmitButton.disabled = false; contactSubmitButton.textContent = contactSendButtonLabel; } setContactStatus('', false); jQuery(contactModalSelector).modal('show'); } function canOpenContactModal() { return !!(contactEmailInput && contactMessageInput && window.jQuery && jQuery(contactModalSelector).length); } function submitContact(email, message) { var formData = new FormData(); formData.append('email', email); formData.append('msg', message); formData.append('email2', ''); formData.append('fromModalAjax', '1'); formData.append('source', 'home-page'); if (contactFileInput && contactFileInput.files && contactFileInput.files.length > 0) { formData.append('jsonFile', contactFileInput.files[0]); } fetch(contactSubmitUrl, { method: 'POST', headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json' }, credentials: 'same-origin', body: formData }) .then(function (response) { return response.text().then(function (text) { var payload = null; if (text) { try { payload = JSON.parse(text); } catch (jsonError) { payload = null; } } if (payload && typeof payload.success !== 'undefined') { return payload; } var textLower = String(text || '').toLowerCase(); if (textLower.indexOf('enter your email address.') !== -1) { return { success: false, message: 'Enter your email address.' }; } if (textLower.indexOf('enter a valid email address.') !== -1) { return { success: false, message: 'Enter a valid email address.' }; } if (textLower.indexOf('enter a message.') !== -1) { return { success: false, message: 'Enter a message.' }; } if (textLower.indexOf('could not send your message right now.') !== -1) { return { success: false, message: 'Could not send your message right now.' }; } if (response.ok && textLower.indexOf('thanks. your message has been sent.') !== -1) { return { success: true, message: 'Thanks. Your message has been sent.' }; } if (!response.ok) { return { success: false, message: 'Could not send your message right now.' }; } return { success: true, message: 'Thanks. Your message has been sent.' }; }); }) .then(function (payload) { var ok = !!(payload && payload.success); var messageText = (payload && payload.message) ? String(payload.message) : (ok ? 'Thanks. Your message has been sent.' : 'Could not send your message right now.'); setContactStatus(messageText, !ok); if (contactSubmitButton) { contactSubmitButton.disabled = ok; contactSubmitButton.textContent = ok ? contactSentButtonLabel : contactSendButtonLabel; } if (ok && contactMessageInput) { contactMessageInput.value = ''; if (contactFileInput) { contactFileInput.value = ''; } } }) .catch(function () { setContactStatus('Could not send your message right now.', true); if (contactSubmitButton) { contactSubmitButton.disabled = false; contactSubmitButton.textContent = contactSendButtonLabel; } }); } document.addEventListener('click', function (event) { var openContactTrigger = event.target.closest('.js-open-contact-modal'); if (openContactTrigger) { event.preventDefault(); openContactModal(openContactTrigger.getAttribute('data-default-message') || '', ''); return; } var contactLink = event.target.closest('a[href]'); if (contactLink) { var href = String(contactLink.getAttribute('href') || '').trim(); if (href) { var isModifiedClick = event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button === 1; if (!isModifiedClick) { try { var contactUrl = new URL(href, window.location.origin); if (contactUrl.pathname.toLowerCase() === '/contact') { if (canOpenContactModal()) { event.preventDefault(); openContactModal(contactUrl.searchParams.get('message') || '', contactUrl.searchParams.get('email') || ''); return; } } } catch (urlError) { // Ignore malformed href values and allow default browser navigation. } } } } var requestThisBtn = event.target.closest('#connect-request-this'); if (requestThisBtn) { event.preventDefault(); var requestText = activeSearch ? ('Please add this connector: ' + activeSearch) : 'Please add a data feed for: '; openContactModal(requestText, ''); return; } var retryLoadBtn = event.target.closest('#connect-retry-load'); if (retryLoadBtn) { event.preventDefault(); showConnectorLoadState('Loading connector library...', false); ensureConnectorCatalogLoaded() .then(function () { resetModalState(); }) .catch(function () { showConnectorLoadState('Could not load connectors right now.', true); }); } }); if (contactSubmitButton) { contactSubmitButton.addEventListener('click', function () { var email = contactEmailInput ? String(contactEmailInput.value || '').trim() : ''; var message = contactMessageInput ? String(contactMessageInput.value || '').trim() : ''; if (!email) { setContactStatus('Enter your email address.', true); return; } if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) { setContactStatus('Enter a valid email address.', true); return; } if (!message) { setContactStatus('Enter a message.', true); return; } contactSubmitButton.disabled = true; contactSubmitButton.textContent = contactSendingButtonLabel; setContactStatus('', false); submitContact(email, message); }); } if (contactMessageInput) { contactMessageInput.addEventListener('keydown', function (event) { if ((event.ctrlKey || event.metaKey) && event.key === 'Enter' && contactSubmitButton) { event.preventDefault(); contactSubmitButton.click(); } }); } if (feedSearch) { feedSearch.addEventListener('input', function () { renderConnectors(feedSearch.value); }); } Array.prototype.forEach.call(modeButtons, function (button) { button.addEventListener('click', function () { setConnectMode(button.getAttribute('data-connect-mode')); renderConnectors(feedSearch ? feedSearch.value : ''); }); }); var searchParams = new URLSearchParams(window.location.search || ''); if (searchParams.get('openContact') === '1') { openContactModal(searchParams.get('message') || '', searchParams.get('email') || ''); var contactStatusMessage = searchParams.get('contactStatus') || ''; if (contactStatusMessage) { var contactIsError = searchParams.get('contactSuccess') !== '1'; setContactStatus(contactStatusMessage, contactIsError); if (!contactIsError && contactSubmitButton) { contactSubmitButton.textContent = contactSentButtonLabel; } } if (window.history && typeof window.history.replaceState === 'function') { var cleanedSearchParams = new URLSearchParams(window.location.search || ''); ['openContact', 'botDetected', 'message', 'email', 'contactSuccess', 'contactStatus'].forEach(function (key) { cleanedSearchParams.delete(key); }); var cleanedQuery = cleanedSearchParams.toString(); var cleanedUrl = window.location.pathname + (cleanedQuery ? ('?' + cleanedQuery) : '') + window.location.hash; window.history.replaceState({}, document.title, cleanedUrl); } } function resetModalState() { if (!connectorCatalogLoaded) { showConnectorLoadState('Loading connector library...', false); return; } if (feedSearch) { feedSearch.value = ''; } setConnectMode('all'); resetSelectedConnectorState(); renderConnectors(''); } if (window.jQuery && jQuery(modalSelector).length) { jQuery(modalSelector).on('show.bs.modal', function () { resetSelectedConnectorState(); setConnectMode('all'); showConnectorLoadState('Loading connector library...', false); ensureConnectorCatalogLoaded() .then(function () { resetModalState(); }) .catch(function () { resetSelectedConnectorState(); showConnectorLoadState('Could not load connectors right now.', true); }); }); } }); }
    Home
    JSON to CSV CSV to JSON XML to CSV
    JSON Guide CSV Guide XML Guide YAML Guide JSON Formatter XML Formatter JSON Editor CSV Shortcuts
    Email Alerts Desktop App API
    Pro Sign In Contact Us
    Contact
    Data.Page