2015-03-17 20 views
12

Bir JSON nesnesini, bir Rust anahtar kelimesi olan bir özellik adı olan Rust'ta çözmek mümkün olup olmadığını merak ediyordum. Ben rustc-serialize sandık ile çalışıyorum ve benim yapı tanımı aşağıdaki gibidir: type bir anahtar kelime olduğu içinJSON nesnesini Rust anahtar kelime özellik adıyla nasıl çözebilirim?

#[derive(RustcDecodable)] 
struct MyObj { 
    type: String 
} 

derleyici bir hata atar. Tam derleyici hata iletisi:

error: expected identifier, found keyword `type` 
src/mysrc.rs:23  type: String, 
          ^~~~ 

Çaylak sorusu için özür dilerim, Rust'u yeni denemeye başladım.

+0

orijinal veri çatışmayı önlemek için değiştirilemez varsaymak güvenli mi? – Shepmaster

+0

evet, kaynak verileri değiştirmek zorunda kalmazsam en iyisi olurdu. Belki de farklı bir isimle yeni bir yapı alanı oluşturmak ve bir '' 'Decoble '' impell '' yazmanın tek yolu var mıdır sanırım? – rking788

+0

El ile uygulayarak ya da 'Json :: from_str' komutunu kullanarak ve sonra da sonuç değerine bakarak görüyorum. – Shepmaster

cevap

15

serde sandığını kullanabilirsiniz. Bu alanlar

Sizin örnek since February 2015 adının verilmesi ardından aşağıdaki gibi görünebilir destekler:

#[derive(Deserialize)] 
struct MyObj { 
    #[serde(rename = "type")] 
    type_name: String 
} 
+0

Tam olarak aradığım şey gibi görünüyor. Birkaç tane farklı türden biri olabilecek bir özelliği ayrıştırmanın mümkün olup olmadığını biliyor musunuz? msg olarak adlandırılan bir alan ya bir JSON dizesi veya bir dizi olabilir. – rking788

+0

Bu, serde icat edilmesinin temel nedenlerinden biridir, çünkü eski desperizer bir etiketi önceden okumadan bir enum okuyamadı. –

+0

Müthiş. Yardım ettiğin için teşekkür ederim. – rking788