我正在尝试使用以下代码解析JSON数组:
public async Task QuoteAsync()
{
await this.Context.Channel.TriggerTypingAsync();
var client = new HttpClient();
var result = await client.GetStringAsync("https://zenquotes.io/api/random");
JArray qarray = JArray.Parse(result);
JObject quote = JObject.Parse(qarray[0]["q"].ToString());
JObject author = JObject.Parse(qarray[0]["a"].ToString());
await this.ReplyAsync($"{quote} - {author}");
}
我在向zenquotes api发送请求时收到的响应是
[
{
"q": "Be where your enemy is not.",
"a": "Sun Tzu",
"h": "<blockquote>“Be where your enemy is not.” — <footer>Sun Tzu</footer></blockquote>"
}
]
我似乎不明白为什么会出现错误,因为我并没有真正看到任何问题。这是我得到的错误:
分析值时遇到意外字符:A.路径",第0行,位置0。
错误发生在第7行:
JObject quote = JObject.Parse(qarray[0]["q"].ToString());
由于第8行是相同的,我预计会出现相同的错误。
根据JObject。分析,
从包含JSON的字符串中加载JObject。
对于"q"
和"a"
,它只是一个简单的字符串,但不是JSON字符串。因此,您不应该使用JObject.Parse
。
对于.ToString()
,检索q
和a
的值就足够了。
string quote = qarray[0]["q"].ToString();
string author = qarray[0]["a"].ToString();
示例程序