以下代码获取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();
}
}
您是否已经在我的代码中发现了错误,或者我的语言概念有误。是不是使用了rustc-serialize货物。最终它没有按预期工作 - 超越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做错了? 我可以获得失败的对象吗?编码怎么样?
...代码是正确的还是有一些明显错误的更多经验?
答案 0 :(得分:1)
狂野猜测:如果其他JSON解析器(例如在Python中)可以解析相同的输入文件,则可能会遇到https://github.com/rust-lang-nursery/rustc-serialize/pull/142中修复的rustc-serialize错误。尝试更新?