今天的目的主要是讓 gemini 回傳的東西從 JSON 格式轉回文字。因為 Java 本身是用類別和物件在處理資料,無法直接理解 JSON,因此這時候就需要 Gson 來做翻譯。
Gson 是 Google 開發的一個 Java 函式庫,主要要用來進行 Java 與 JSON 資料之間的轉換。當我們收到一大串 JSON 字串時,可以利用 Gson 將它解析成 JsonObject、JsonArray 等結構。由於 JSON 本身具有一層包一層的階層關係,因此我們可以像拆禮物一樣,從最外層開始,一層層找到需要的資料。
常見的功能可以分成兩種:
這次主要使用到的有:
JsonParser:解析 JSON 字串
JsonObject:處理 { } 的 JSON 物件
JsonArray:處理 [ ] 的 JSON 陣列
首先要確定層級定位,方便程式按照 JSON 的結構一層一層取得資料。
先取得 candidates,接著再取得第一筆資料中的 content,再從 content找到 parts:
最後才取得真正需要的 text 。特別要注意的是回傳值需要加入 extractTextFromResponse(),這樣可以避免最後還是回傳完整的response.body()。
JSON 本身其實是一串文字,所以我一開始很直覺的想用 split() 直接切分,但後來了解到 JSON 本身有不同的物件、陣列和層級,如果直接把字串切開,很容易因為回答中包含特殊符號或換行而取得錯誤的內容。
最後成功跑出文字: