> ## Documentation Index
> Fetch the complete documentation index at: https://student-213fb9fc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# JSONモード - 構造化結果

> LLMでページから構造化データを抽出する

<Note>
  **v2 APIの変更:** JSONスキーマ抽出はv2で完全にサポートされていますが、APIのフォーマットが変更されました。v2では、スキーマは `formats: [{type: "json", schema: {...}}]` のようにフォーマットオブジェクト内に直接埋め込まれます。v1の `jsonOptions` パラメータはv2では廃止されています。
</Note>

<div id="scrape-and-extract-structured-data-with-firecrawl">
  ## Firecrawlで構造化データをスクレイプして抽出する
</div>

FirecrawlはAIを用いて、ウェブページから構造化データを3ステップで取得します:

1. **スキーマを設定（任意）:**
   取得したいデータを指定するために（OpenAIの形式の）JSONスキーマを定義するか、厳密なスキーマが不要な場合はウェブページのURLと`prompt`だけを指定します。

2. **リクエストを送信:**
   URLとスキーマを、JSONモードを用いて/scrape エンドポイントに送ります。詳しくはこちら:
   [Scrape Endpoint Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape)

3. **データを取得:**
   スキーマに一致するクリーンな構造化データが返ってきます。すぐに利用できます。

これにより、必要なフォーマットでウェブデータを素早く簡単に取得できます。

<div id="extract-structured-data">
  ## 構造化データの抽出
</div>

<div id="json-mode-via-scrape">
  ### /scrape による JSONモード
</div>

スクレイピングしたページから構造化データを抽出するために使用します。

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl
  from pydantic import BaseModel

  app = Firecrawl(api_key="fc-YOUR-API-KEY")

  class CompanyInfo(BaseModel):
      company_mission: str
      supports_sso: bool
      is_open_source: bool
      is_in_yc: bool

  result = app.scrape(
      'https://firecrawl.dev',
      formats=[{
        "type": "json",
        "schema": CompanyInfo.model_json_schema()
      }],
      only_main_content=False,
      timeout=120000
  )

  print(result)
  ```

  ```js Node theme={null}
  import Firecrawl from "@mendable/firecrawl-js";
  import { z } from "zod";

  const app = new Firecrawl({
    apiKey: "fc-YOUR_API_KEY"
  });

  // 抽出するコンテンツのスキーマを定義
  const schema = z.object({
    company_mission: z.string(),
    supports_sso: z.boolean(),
    is_open_source: z.boolean(),
    is_in_yc: z.boolean()
  });

  const result = await app.scrape("https://firecrawl.dev", {
    formats: [{
      type: "json",
      schema: schema
    }],
  });

  console.log(result);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v2/scrape \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer YOUR_API_KEY' \
      -d '{
        "url": "https://firecrawl.dev",
        "formats": [ {
          "type": "json",
          "schema": {
            "type": "object",
            "properties": {
              "company_mission": {
                        "type": "string"
              },
              "supports_sso": {
                        "type": "boolean"
              },
              "is_open_source": {
                        "type": "boolean"
              },
              "is_in_yc": {
                        "type": "boolean"
              }
            },
            "required": [
              "company_mission",
              "supports_sso",
              "is_open_source",
              "is_in_yc"
            ]
          }
        } ]
      }'
  ```
</CodeGroup>

出力:

```json JSON theme={null}
{
    "success": true,
    "data": {
      "json": {
        "company_mission": "AI対応のウェブスクレイピングとデータ抽出",
        "supports_sso": true,
        "is_open_source": true,
        "is_in_yc": true
      },
      "metadata": {
        "title": "Firecrawl",
        "description": "AI対応のウェブスクレイピングとデータ抽出",
        "robots": "follow, index",
        "ogTitle": "Firecrawl",
        "ogDescription": "AI対応のウェブスクレイピングとデータ抽出",
        "ogUrl": "https://firecrawl.dev/",
        "ogImage": "https://firecrawl.dev/og.png",
        "ogLocaleAlternate": [],
        "ogSiteName": "Firecrawl",
        "sourceURL": "https://firecrawl.dev/"
      },
    }
}
```

<div id="structured-data-without-schema">
  ### スキーマ不要の構造化データ
</div>

エンドポイントに `prompt` を渡すだけで、スキーマなしで抽出できます。データの構造は LLM が決定します。

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  app = Firecrawl(api_key="fc-YOUR-API-KEY")

  result = app.scrape(
      'https://firecrawl.dev',
      formats=[{
        "type": "json",
        "prompt": "ページから企業のミッションを抽出してください。"
      }],
      only_main_content=False,
      timeout=120000
  )

  print(result)
  ```

  ```js Node theme={null}
  import Firecrawl from "@mendable/firecrawl-js";

  const app = new Firecrawl({
    apiKey: "fc-YOUR_API_KEY"
  });

  const result = await app.scrape("https://firecrawl.dev", {
    formats: [{
      type: "json",
      prompt: "ページから会社のミッションを抽出してください。"
    }]
  });

  console.log(result);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v2/scrape \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer YOUR_API_KEY' \
      -d '{
        "url": "https://firecrawl.dev",
        "formats": [{
          "type": "json",
          "prompt": "ページから企業ミッションを抽出する"
        }]
      }'
  ```
</CodeGroup>

出力:

```json JSON theme={null}
{
    "success": true,
    "data": {
      "json": {
        "company_mission": "AI搭載のウェブスクレイピングとデータ抽出",
      },
      "metadata": {
        "title": "Firecrawl",
        "description": "AI搭載のウェブスクレイピングとデータ抽出",
        "robots": "follow, index",
        "ogTitle": "Firecrawl",
        "ogDescription": "AI搭載のウェブスクレイピングとデータ抽出",
        "ogUrl": "https://firecrawl.dev/",
        "ogImage": "https://firecrawl.dev/og.png",
        "ogLocaleAlternate": [],
        "ogSiteName": "Firecrawl",
        "sourceURL": "https://firecrawl.dev/"
      },
    }
}
```

<div id="real-world-example-extracting-company-information">
  ### 実例：企業情報の抽出
</div>

以下は、ウェブサイトから構造化された企業情報を抽出する包括的な例です：

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl
  from pydantic import BaseModel

  app = Firecrawl(api_key="fc-YOUR-API-KEY")

  class CompanyInfo(BaseModel):
      company_mission: str
      supports_sso: bool
      is_open_source: bool
      is_in_yc: bool

  result = app.scrape(
      'https://firecrawl.dev/',
      formats=[{
          "type": "json",
          "schema": CompanyInfo.model_json_schema()
      }]
  )

  print(result)
  ```

  ```js Node theme={null}
  import Firecrawl from "@mendable/firecrawl-js";
  import { z } from "zod";

  const app = new Firecrawl({
    apiKey: "fc-YOUR_API_KEY"
  });

  const companyInfoSchema = z.object({
    company_mission: z.string(),
    supports_sso: z.boolean(),
    is_open_source: z.boolean(),
    is_in_yc: z.boolean()
  });

  const result = await app.scrape("https://firecrawl.dev/", {
    formats: [{
      type: "json",
      schema: companyInfoSchema
    }]
  });

  console.log(result);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v2/scrape \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer YOUR_API_KEY' \
      -d '{
        "url": "https://firecrawl.dev/",
        "formats": [{
          "type": "json",
          "schema": {
            "type": "object",
            "properties": {
              "company_mission": {
                "type": "string"
              },
              "supports_sso": {
                "type": "boolean"
              },
              "is_open_source": {
                "type": "boolean"
              },
              "is_in_yc": {
                "type": "boolean"
              }
            },
            "required": [
              "company_mission",
              "supports_sso",
              "is_open_source",
              "is_in_yc"
            ]
          }
        }]
      }'
  ```
</CodeGroup>

出力：

```json Output theme={null}
{
  "success": true,
  "data": {
    "json": {
      "company_mission": "WebサイトをLLM対応データに変換",
      "supports_sso": true,
      "is_open_source": true,
      "is_in_yc": true
    }
  }
}
```

<div id="json-format-options">
  ### JSON フォーマットのオプション
</div>

v2 で JSONモード を使用する場合、`formats` にスキーマを直接埋め込んだオブジェクトを含めます:

`formats: [{ type: 'json', schema: { ... }, prompt: '...' }]`

パラメータ:

* `schema`: 取得したい構造化出力を記述する JSON Schema（スキーマベースの抽出では必須）。
* `prompt`: 抽出をガイドするための任意のプロンプト（スキーマなしの抽出でも使用）。

**重要:** v1 と異なり、v2 には個別の `jsonOptions` パラメータはありません。スキーマは `formats` 配列内のフォーマットオブジェクトに直接含める必要があります。

<Note>
  **HTML 属性は JSON 抽出では利用できません。** JSON 抽出はページを markdown に変換した結果に対して実行され、この変換では表示テキストのみが保持されます。HTML 属性（例: `data-id`、要素上のカスタム属性）は変換時に削除されるため、LLM からは参照できません。HTML 属性値を抽出する必要がある場合は、`rawHtml` フォーマットを使用してクライアント側で属性をパースするか、`executeJavascript` アクションを使って抽出前に属性値を表示テキストへ埋め込んでください。
</Note>
