Чтение файла json и запись без отступа

Следующий код берет папку файлов json (сохраненную с отступом), открывает ее, получает содержимое и сериализует в json и записывает в файл новый файл. Та же самая задача кода в Python работает, поэтому это не данные. Но версия ржавчины, которую вы видите здесь:

extern crate rustc_serialize;
use rustc_serialize::json;
use std::io::Read;
use std::fs::read_dir;
use std::fs::File;
use std::io::Write;
use std::io;
use std::str;


fn write_data(filepath: &str, data: json::Json) -> io::Result<()> {

    let mut ofile = try!(File::create(filepath));
    let encoded: String = json::encode(&data).unwrap();
    try!(ofile.write(encoded.as_bytes()));
    Ok(())
}


fn main() {

    let root = "/Users/bling/github/data/".to_string();
    let folder_path = root + &"texts";
    let paths = read_dir(folder_path).unwrap();

    for path in paths {
        let input_filename = format!("{}", path.unwrap().path().display());
        let output_filename = str::replace(&input_filename, "texts", "texts2");

        let mut data = String::new();
        let mut f = File::open(input_filename).unwrap();
        f.read_to_string(&mut data).unwrap();
        let json = json::Json::from_str(&data).unwrap();

        write_data(&output_filename, json).unwrap();
    }
}

Вы уже заметили ошибку в моем коде или я неправильно понял некоторые концепции языка? Неправильно ли используется ржавчина-серийный груз. В конце он не работает, как ожидалось - превзойти Python.

± % cargo run --release --verbose                                                                                                                                            
       Fresh rustc-serialize v0.3.16
       Fresh fileprocessing v0.1.0 (file:///Users/bling/github/rust/fileprocessing)
     Running `target/release/fileprocessing`
thread '<main>' panicked at 'called `Result::unwrap()` on an `Err` value: SyntaxError("unescaped control character in string", 759, 55)', ../src/libcore/result.rs:736
Process didn't exit successfully: `target/release/fileprocessing` (exit code: 101)

Почему выдает ошибку, что моя сериализация JSON сделано неправильно?
Могу ли я получить объект, на котором не получается? Как насчет кодирования?

... правильный код или что-то явно не так с некоторым опытом?

1 ответ

Подходящее предположение: если этот же входной файл может быть проанализирован другими анализаторами JSON (например, в Python), вы можете столкнуться с ошибкой rustc-serialize, которая была исправлена ​​в https://github.com/rust-lang-nursery/rustc-serialize/pull/142. Попробовать обновить?

Другие вопросы по тегам