在通过 Rust 使用 Twitch API 时,为什么我得到的是数字列表而不是 JSON?

Why do I get a list of numbers instead of JSON when using the Twitch API via Rust?

我正在玩 Rust 中的 Twitch API,但我无法从响应中获得正确的 JSON 输出。

extern crate curl;

use curl::http;

fn main() {
    let url = "http://api.twitch.tv/kraken/channels/twitch";

    let resp = http::handle()
        .get(url)
        .exec().unwrap();

    /* Prints StatusCode and Headers correctly. Print Body (requested json as numbers) */
    println!("Code : {}\nHeaders : {:?}\nHeaders : {:?}\nBody : {:?}", 
        resp.get_code(), resp.get_header("content-length"), resp.get_headers(), resp.get_body());

    /* Prints everything after each other and prints json correctly */
    println!("{}", resp);
}

我不明白为什么我输出的是数字而不是 JSON。

输出示例 json:

[123, 34, 109, 97, 116, 117, 114, 101, 34, 58, 102, 97, 108]

正确的例子json:

{"mature":false,"status":"Twitch Weekly - 12/11/2015","broadcaster_language":"en"}

完整输出示例:https://bitbucket.org/snippets/adrianz/q88KM

get_body function 有签名:

pub fn get_body<'a>(&'a self) -> &'a [u8] {

也就是说,它正在返回一个字节片段,打印这样的一个片段会将它们打印为数字。这些数字是 JSON 中 (ASCII) 字符的原始值,可以通过 from_utf8:[=22 查看为 str(如果它们是 UTF-8 编码) =]

fn main() {
    let b = [123_u8, 34, 109, 97, 116, 117, 114, 101, 34, 58, 102, 97, 108];

    println!("{:?}", std::str::from_utf8(&b));
}

输出Ok("{\"mature\":fal")。即字节是您期望的 JSON 数据的第一部分。

顺便说一句,了解函数的类型是一件非常有用的事情,您可以通过 运行ning cargo doc --open 轻松做到这一点,这将 运行 rustdoc crate 和你所有的依赖项,然后在你的网络浏览器中打开它(如果 --open 不起作用,那么在你的网络浏览器中导航到 /path/to/project/target/doc/curl/index.html 应该也可以)。