Следующий код возьмите папку json-файлов (сохраненных с отступом), откройте ее, получите контент и сериализуйте в json и напишите в файл нового файла. Такая же задача кода в python работает, поэтому это не данные. Но ржавчина версия вы видите здесь:Чтение файла json и запись без отступа
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();
}
}
У вас есть место на ошибку в моем коде уже или я получил некоторые языковые понятия неправильно. Неправильно используется грузик-сериализованный груз. В конце он работает не так, как ожидалось, - чтобы превзойти питона.
± % 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, сделанная неправильно?
Могу ли я получить объект, на котором он не работает? Как насчет кодировки?
... является правильным кодом или есть что-то явно неправильное с некоторым опытом?
Что вы спрашиваете? Вы спрашиваете, почему он медленнее, чем Python («* превосходит python *»)? Вы спрашиваете, почему вы получаете сообщение об ошибке? * SyntaxError ("unescaped control character in string", 759, 55) * - Посмотрел ли вы файл в этой позиции, чтобы узнать, почему у вас есть контрольный символ? * это не данные * - более чем возможно, что один из Rust или Python более строг относительно стандарта JSON. – Shepmaster
Извините, не было так очевидно, как думал, и добавил вопрос до конца. Благодарю. – rebeling
Проблема в том, что один из ваших входных файлов содержит недопустимый JSON. Вам нужно выяснить, какой файл (распечатать имя файла?), А затем посмотреть строку 759, колонку 55, чтобы выяснить, что это такое. Об этом сообщает сообщение об ошибке. – Shepmaster