2015-05-17 19 views
13

Ho questo finora nel mio obiettivo di analizzare questi dati JSON a Rust:Come analizzare un file JSON?

extern crate rustc_serialize; 
use rustc_serialize::json::Json; 
use std::fs::File; 
use std::io::copy; 
use std::io::stdout; 

fn main() { 
    let mut file = File::open("text.json").unwrap(); 
    let mut stdout = stdout(); 
    let mut str = &copy(&mut file, &mut stdout).unwrap().to_string(); 
    let data = Json::from_str(str).unwrap(); 
} 

e text.json è

{ 
    "FirstName": "John", 
    "LastName": "Doe", 
    "Age": 43, 
    "Address": { 
     "Street": "Downing Street 10", 
     "City": "London", 
     "Country": "Great Britain" 
    }, 
    "PhoneNumbers": [ 
     "+44 1234567", 
     "+44 2345678" 
    ] 
} 

Quale dovrebbe essere il mio prossimo passo nel parsing esso? Il mio obiettivo principale è ottenere dati JSON come questo e analizzare una chiave da esso, come Age.

+0

Sembra di leggere la pagina giusta per l'analisi di esso. Hai visto l'[esempio] (http://doc.rust-lang.org/rustc-serialize/rustc_serialize/json/index.html#parsing-a-str-to-json-and-reading-the-result) in fondo alla pagina che sembra esattamente quello che vuoi? – squiguy

+0

@squiguy Sì, ho aggiunto 'let obj = data.as_object(). Unwrap();' e ho ottenuto 'thread '

' in preda al panico 'chiamato' Option :: unwrap() 'su un valore' None'', C:/bo t/slave/stable-dist-rugc-win-32/build/src/libcore \ option.rs: 362 } Si è verificato un errore sconosciuto – Vikaton

risposta

20

risolto da molti membri della comunità utile Rust:

extern crate rustc_serialize; 
use rustc_serialize::json::Json; 
use std::fs::File; 
use std::io::Read; 

fn main() { 
    let mut file = File::open("text.json").unwrap(); 
    let mut data = String::new(); 
    file.read_to_string(&mut data).unwrap(); 

    let json = Json::from_str(&data).unwrap(); 
    println!("{}", json.find_path(&["Address", "Street"]).unwrap()); 
} 
+0

Il problema era il mio metodo di lettura dal file – Vikaton

+0

Si noti che il rugc_serialize repo dice che ora è deprecato a favore di https://github.com/serde-rs/json – FrickeFresh