了解JSON格式
下面大略提一下怎麼寫:
物件用{}包起來,一組資料含鍵值和數值(key:value),鍵值和數值用:隔開,各組資料之間用,隔開,比如說{"name":"Tim", "age":18}。
陣列使用[],值使用,隔開,如[1, 2, 3]、["Unity", "JSON", "test"]等等。
當然陣列下也可以包含物件,陣列也可以做為物件的數值,例如{"name":"Tim", "age":18, "item_bag":[{"name":"apple", "price":20}, {"name":"sword", "price":300}, "test"]},item_bag下就包含兩個物件和一個字串"test"。
大致了解JSON的檔案後,我們需要讓它能在Unity內被存取,這裡使用LitJSON,開啟下列的網站:
http://lbv.github.io/litjson/
找到dll連結後下載,新增Unity專案將下載完成的LitJson.dll檔匯入,匯入後新增Script(JSONTest.cs),最後把準備好的JSON檔也匯入,這裡用第一段最後的例子(Sample.json)。
現在Unity專案內會有三個檔案:
1. LitJson.dll
2. JSONTest.cs
3. Sample.json
接著開啟Script,將dll加入參考:
左側Solution欄位找到此Script名稱,References資料夾右鍵Edit References,找到Assets下的LitJson.dll加入,程式碼中只要using LitJson;沒出錯就代表成功了。
到這就可以開始讀取JSON的資料,以下是Script,掛載在Main Camera下:
using UnityEngine; using System.Collections; using System.IO; using LitJson; public class JSONTest : MonoBehaviour { private string jsonString; private JsonData jsonData; void Start () { jsonString = File.ReadAllText (Application.dataPath + "/sample.json");//(1) jsonData = JsonMapper.ToObject (jsonString);//(2) Debug.Log (jsonData["name"]);//(3) Debug.Log (jsonData["age"]); } }(1)將json檔的內容轉換成字串,File.ReadAllText函式需要using System.IO;,注意一下檔案路徑。
(2)再將字串轉換成物件(Object)後代入JsonData,JsonData需要using LitJson;,到這裡就可以透過查詢JsonData下的鍵值找到數值。
(3)使用鍵值name和age查詢值,依照json檔的內容可以得到Tim和18這兩個log資訊。
可以看到順利的印出值,接下來看Object第三項item_bag陣列的情況:
using UnityEngine; using System.Collections; using System.IO; using LitJson; public class JSONTest : MonoBehaviour { private string jsonString; private JsonData jsonData; void Start () { jsonString = File.ReadAllText (Application.dataPath + "/sample.json"); jsonData = JsonMapper.ToObject (jsonString); Debug.Log (jsonData["item_bag"][0]["name"] + ":" + jsonData["item_bag"][0]["price"]); Debug.Log (jsonData["item_bag"][1]["name"] + ":" + jsonData["item_bag"][1]["price"]); Debug.Log (jsonData["item_bag"][2]); } }當遇到陣列時,就用編號查詢,例如要找item_bag下的第2項名稱,就會是jsonData["item_bag"][2],可以查到test字串,當查到的項目是物件,再接著往下查,如jsonData["item_bag"][0]的項目是{"name":"apple", "price":20},jsonData["item_bag"][0]["name"]可以找到apple字串。
以上就是讀取的部分,至於存的部分就流到下次再談,以下是參考的教學影片:
https://www.youtube.com/watch?v=OyQQ-7-22Hw
這次就到這裡。
hi, 第一次接触json,有个问题想请问你; 如何把JSON的数据读取以后贴在ugui的text上?
回覆刪除因为已经转换成Object (jsonData = JsonMapper.ToObject (jsonString);)那么要如何变成string?
string json = JsonUtility.ToJson(jsonData);
刪除受益良多 謝謝~
回覆刪除