[英]Read out specific fields from a Json enum in Rust
在Rust 0.9中,我找到了一種從JSON枚舉中讀取值的方法。 但是,我正在努力在當前每晚的Rust 0.10中弄清楚這一點。 理想情況下,我只想從Json枚舉中讀取一個值,但是如果使用預定義的結構也是唯一可行的方法。
這是以前的工作方式:
extern mod extra;
fn main() {
let json = extra::json::from_str(json_str).unwrap();
let (lat, long): (f32, f32) = match json {
Object(o) => {
let lat = o.find(&~"latitude").unwrap();
let lat2 = lat.to_str();
let lat3: Option<f32> = from_str(lat2);
let longJson = o.find(&~"longitude").unwrap();
let longStr = longJson.to_str();
let long: Option<f32> = from_str(longStr);
(lat3.unwrap(), long.unwrap())
}
_ => { (0.0,0.0) }
};
println(lat.to_str());
println(long.to_str());
}
變量json_str
實際上應該在上面定義,但是為了清楚json_str
,我將其放在此處:
{
'timezone': 'America/Los_Angeles',
'isp': 'Monkey Brains',
'region_code': 'CA',
'country': 'United States',
'dma_code': '0',
'area_code': '0',
'region': 'California',
'ip': '199.116.73.2',
'asn': 'AS32329',
'continent_code': 'NA',
'city': 'San Francisco',
'longitude': - 122.4194,
'latitude': 37.7749,
'country_code': 'US',
'country_code3': 'USA'
}
幾乎是同一回事,只有一些函數名稱已更改。 這是一個工作代碼:
extern crate serialize;
use serialize::json;
static json_str: &'static str = r#"
{
"timezone": "America/Los_Angeles",
"isp": "Monkey Brains",
"region_code": "CA",
"country": "United States",
"dma_code": "0",
"area_code": "0",
"region": "California",
"ip": "199.116.73.2",
"asn": "AS32329",
"continent_code": "NA",
"city": "San Francisco",
"longitude": -122.4194,
"latitude": 37.7749,
"country_code": "US",
"country_code3": "USA"
}
"#;
fn main() {
let json = json::from_str(json_str);
let (lat, long): (f32, f32) = match json {
Ok(json::Object(o)) => {
let lat = o.find(&~"latitude").unwrap();
let latOpt: Option<f64> = lat.as_number();
let long = o.find(&~"longitude").unwrap();
let longOpt: Option<f64> = long.as_number();
(latOpt.unwrap() as f32, longOpt.unwrap() as f32)
}
Err(e) => fail!("Error decoding: {}", e),
_ => { (0.0,0.0) }
};
println!("{}", lat.to_str());
println!("{}", long.to_str());
}
請注意,我不得不稍微改變你的JSON對象,因為它是無效的-它使用'
,而不是"
字符串,也有在經度錯誤( -
和自己之間用空格分隔數)。
另一個小變化是,無需執行字符串轉換即可獲取數字。 Json
枚舉具有as_number()
方法,該方法返回Option<f64>
。 如果需要,可以將f64
為f32
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.