最近沉迷學習Rust,但網絡上的教學很多都比較簡單,而且中文教學資源感覺也不多….所以稍微再寫一些這方面的文章!
在使用Rust時,我想大家最常踩的其中一個坑應該是「讀取JSON File」吧。
Rust似乎沒有自帶的JSON讀寫功能的,所以在這裡推薦一款名為serde_json的第三方套件,應該能滿足許多的要求:
https://crates.io/crates/serde_json/1.0.1/dependencies
以下是使用serde_json的簡單例子(假設這個Json file是在Main 以外的Function裡讀取的):
fn get_json() -> std::io::Result{
let file = File::open("target.json").unwrap();
let reader = BufReader::new(file);
let json: serde_json::Value = serde_json::from_reader(reader)?;
Ok(json)
}
這段程式碼回傳的會是Value值,裡面包含了”target.json”裡面的一切內容。要使用回傳的這個Value也很簡單,
let json_value = get_json();
let json_content = json_value.unwrap();
在unwarp過後,我們就可以按需要將它轉換成所需要的格式:
//Read the array from the Json "Object"
let json_content_object = json_content.as_object().unwrap();
//Read the array from the Json "Array"
let json_content_array = json_content.as_array().unwrap();
之後的存取方法,基本上就跟Rust自帶的Array和Object差不多了。
如果想要更具體一些的例子,可以參考我的Rust Telegram Bot專案(整體未完成,但是JSON讀取的部份已經完整了):
https://github.com/falconshark/eorzea-fishwatcher
祝各位Rust愉快!