**一、前言
昨天進一步觀察了 Open Library API 的 JSON 結構,知道一份 JSON 裡可以同時出現 String、Number、Boolean、null、Array 和 Object。
不過只知道資料型態還不夠
今天想進一步了解:這些欄位在這份 API Response 裡到底代表什麼?
這次會繼續拿搜尋 Potter 得到的結果來解讀。
⸻
**二、搜尋結果總數

首先可以看到:
"numFound":31782
這代表這次搜尋 Potter 時,
API 找到了 31,782 筆符合條件的搜尋結果。
所以這個數字是在描述「整個搜尋結果有多少筆」,
並不是代表這一次畫面上會直接顯示 31,782 本書。
⸻
**三、資料從哪裡開始?
接著可以看到:
"start":0
這裡的 start 可以理解成這次回傳資料的起始位置。
現在的數值是 0,代表這次資料從第 0 筆的位置開始。
這也讓我發現,API 在處理大量搜尋結果時,
不一定會一次把所有資料全部回傳,
而可能會使用起始位置等方式取得不同部分的資料。
⸻
**四、搜尋結果數量是否精確?
接下來是:
"numFoundExact":true
這裡的 true 是 Boolean,
表示 API 認為前面的搜尋結果數量是精確的。
也就是說:
numFound → 31782
numFoundExact → true
兩個欄位放在一起看,可以理解成:
API 告訴我們這次搜尋找到 31,782 筆,
而且這個數字是精確的。
⸻
**五、這次搜尋的關鍵字
再往下可以看到:
"q":"Potter"
這裡的 q 是這次搜尋使用的查詢內容,
因為我們前面輸入的是:Potter
所以 API 回傳:"q":"Potter"
也就是在 Response 中保留這次查詢所使用的關鍵字。
這也可以和前幾天學到的 Parameter 對應起來。
我們透過 Request 告訴 API「我要搜尋 Potter。」
API 處理後,在 Response 裡可以看到
q = Potter。
⸻
**六、offset 為什麼是 null?
接著可以看到:
"offset":null
前一天我們已經知道 null 代表這個欄位目前沒有實際的值,
因此這裡可以理解成,
這次 Response 中 offset 沒有設定具體數值。
這也讓我發現,
API 回傳的 JSON 不一定每個欄位都會有實際內容,
有些欄位可能在特定情況下才會使用。
⸻
**七、docs
接下來是今天最重要的一個區塊:
"docs":[
看到 docs 後,後面會出現一大串資料。
這裡的 docs 可以理解成實際的搜尋結果。
而因為 docs 後面使用的是 [],代表它是一個 Array。
Array 裡面又會放一個又一個 Object,
例如:
"docs":[
{
"author_name":["J. K. Rowling"],
...
},
{
...
}
]
可以把它想成:
docs
│
├── 第一本書的資料
├── 第二本書的資料
├── 第三本書的資料
└── ...
前面的 numFound 是在描述總共有多少搜尋結果,
而 docs 則是存放實際回傳的書籍資料。
兩個概念是不一樣的。
⸻
**八、總結
把今天看到的內容放在一起,
就可以比較容易理解這份 JSON:
numFound
→ 總共有多少搜尋結果
start
→ 從哪個位置開始
numFoundExact
→ 搜尋結果數量是否精確
q
→ 這次搜尋的關鍵字
offset
→ 目前沒有設定的欄位
docs
→ 實際回傳的書籍資料
這一大串JSON是不同欄位各自負責描述搜尋結果的不同部分有秩序的組成的。
透過實際分析 numFound、start、numFoundExact、q、offset 和 docs,可以發現一個 API Response 同時包含了「搜尋結果的整體資訊」以及「實際的書籍資料」。
其中 docs 是最主要的資料區塊,裡面放著一筆一筆的書籍 Object。
下一篇會把前面幾天學到的內容整合起來,
作為書籍 API 這段的的收尾。