Fetch JSON

Send a GET request and read in JSON from the response. Use to fetch external data.

Last updated Apr 23, 2026 If you want to get started quickly, click on the button below.

Deploy to Cloudflare

This creates a repository in your GitHub account and deploys the application to Cloudflare Workers.

export default {
    async fetch(request, env, ctx) {
        const url = "https://jsonplaceholder.typicode.com/todos/1";

        // gatherResponse returns both content-type & response body as a string
        async function gatherResponse(response) {
            const { headers } = response;
            const contentType = headers.get("content-type") || "";
            if (contentType.includes("application/json")) {
                return { contentType, result: JSON.stringify(await response.json()) };
            }
            return { contentType, result: await response.text() };
        }

        const response = await fetch(url);
        const { contentType, result } = await gatherResponse(response);

        const options = { headers: { "content-type": contentType } };
        return new Response(result, options);
    },
};
interface Env {}
export default {
    async fetch(request, env, ctx): Promise<Response> {
        const url = "https://jsonplaceholder.typicode.com/todos/1";

        // gatherResponse returns both content-type & response body as a string
        async function gatherResponse(response) {
            const { headers } = response;
            const contentType = headers.get("content-type") || "";
            if (contentType.includes("application/json")) {
                return { contentType, result: JSON.stringify(await response.json()) };
            }
            return { contentType, result: await response.text() };
        }

        const response = await fetch(url);
        const { contentType, result } = await gatherResponse(response);

        const options = { headers: { "content-type": contentType } };
        return new Response(result, options);
    },
} satisfies ExportedHandler<Env>;
from workers import WorkerEntrypoint, Response, fetch
import json

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        url = "https://jsonplaceholder.typicode.com/todos/1"

        # gather_response returns both content-type & response body as a string
        async def gather_response(response):
            headers = response.headers
            content_type = headers["content-type"] or ""

            if "application/json" in content_type:
                return (content_type, json.dumps(await response.json()))
            return (content_type, await response.text())

        response = await fetch(url)
        content_type, result = await gather_response(response)

        headers = {"content-type": content_type}
        return Response(result, headers=headers)
import { Hono } from 'hono';

type Env = {};

const app = new Hono<{ Bindings: Env }>();

app.get('*', async (c) => {
  const url = "https://jsonplaceholder.typicode.com/todos/1";

  // gatherResponse returns both content-type & response body as a string
  async function gatherResponse(response: Response) {
    const { headers } = response;
    const contentType = headers.get("content-type") || "";

    if (contentType.includes("application/json")) {
      return { contentType, result: JSON.stringify(await response.json()) };
    }

    return { contentType, result: await response.text() };
  }

  const response = await fetch(url);
  const { contentType, result } = await gatherResponse(response);

  return new Response(result, {
    headers: { "content-type": contentType }
  });
});

export default app;

Was this helpful?

YesNo

On this page

Fetch JSON - 图2Docs

{"@context":"https://schema.org","@type":"TechArticle","@id":"https://developers.cloudflare.com/workers/examples/fetch-json/#page","headline":"Fetch JSON","description":"Send a GET request and read in JSON from the response. Use to fetch external data.","url":"https://developers.cloudflare.com/workers/examples/fetch-json/","inLanguage":"en","image":"https://developers.cloudflare.com/workers/examples/fetch-json/og.png?v=d251b4d33dd2d427","dateModified":"2026-04-23","publisher":{"@type":"Organization","name":"Cloudflare","description":"One platform for your apps, agents, and workforce. Build, secure, and scale without managing infrastructure","url":"https://www.cloudflare.com/","sameAs":["https://github.com/cloudflare","https://www.linkedin.com/company/cloudflare","https://x.com/cloudflare"],"logo":{"@type":"ImageObject","url":"https://developers.cloudflare.com/logo.svg"},"address":{"@type":"PostalAddress","streetAddress":"101 Townsend St","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94107","addressCountry":"US"},"contactPoint":[{"@type":"ContactPoint","contactType":"Customer Support","url":"https://support.cloudflare.com/","availableLanguage":["English"]},{"@type":"ContactPoint","contactType":"Sales","url":"https://www.cloudflare.com/contact/","availableLanguage":["English"]}]},"isPartOf":{"@type":"WebSite","@id":"https://developers.cloudflare.com/#website","name":"Cloudflare Docs","url":"https://developers.cloudflare.com/"},"keywords":["JSON","JavaScript","TypeScript","Python"]}


description: Fetch weather data from an API using the user's geolocation data. title: "Geolocation: Weather application" image: https://developers.cloudflare.com/workers/examples/geolocation-app-weather/og.png?v=972760bfcd66e48d


Skip to content

Documentation Index
Fetch the complete documentation index at: https://developers.cloudflare.com/workers/llms.txt
Use this file to discover all available pages before exploring further.