2015-01-19 4 views
2

Я пытаюсь расшифровать JSON в Rust.Как декодировать значение JSON, которое может быть строковым или нулевым?

примеры JSON:

[{"id": 1234, "rank": 44, "author": null}] 
[{"id": 1234, "rank": 44, "author": "Some text"}] 

Если я использую String для поля автора:

#[derive(Show, RustcDecodable, RustcEncodable)] 
pub struct TestStruct { 
    pub id: u64, 
    pub rank: i64, 
    pub author: String, 
} 

Он бросает ошибку:

thread '<main>' panicked at 'called `Result::unwrap()` on an `Err` value: ExpectedError("String", "null")', /home/rustbuild/src/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libcore/result.rs:742 

Как декодировать (фильтр/игнорировать null) это значение JSON?

ответ

4

Изменить тип author от String до Option<String>.

#[derive(Show, RustcDecodable, RustcEncodable)] 
pub struct TestStruct { 
    pub id: u64, 
    pub rank: i64, 
    pub author: Option<String>, 
} 

Результаты:

Ok([TestStruct { id: 1234u64, rank: 44i64, author: None }] 
Ok([TestStruct { id: 1234u64, rank: 44i64, author: "Some text" }]) 
Смежные вопросы