【问题标题】:Having error upon trying to parse a JSON array into JSON object尝试将 JSON 数组解析为 JSON 对象时出错
【发布时间】:2021-09-20 20:39:18
【问题描述】:

我正在尝试使用以下代码解析 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>&ldquo;Be where your enemy is not.&rdquo; &mdash; <footer>Sun Tzu</footer></blockquote>"
  }
]

我似乎无法弄清楚为什么会发生错误,因为我真的没有看到任何问题。 这是我得到的错误:

解析值时遇到意外字符:A. Path '', line 0, position 0.

错误发生在第 7 行:

JObject quote = JObject.Parse(qarray[0]["q"].ToString());

由于第 8 行是相同的,我预计会出现相同的错误。

【问题讨论】:

  • 附上的JSON是完整的JSON结果吗?因为您的 JSON 结果不是一个数组,而是 single object.
  • 将字符串结果复制到任何开发工具控制台并测试您的代码。
  • @Yong Shun 我在输入时犯了一个错误,它实际上是一个用方括号括起来的 json 数组
  • 嗨@ShauryaChauhan,感谢您的澄清。您可以将 JSON 结果更新为 JSON 数组。
  • 嗨 @Yong Shun 我知道我也可以反序列化 json 数组,但给出的答案更好:3

标签: c# json json.net discord.net


【解决方案1】:

根据JObject.Parse

从包含 JSON 的字符串中加载 JObject。

对于您的"q""a",它只是一个简单 字符串,但不是JSON 字符串。因此你不应该使用JObject.Parse

使用.ToString(),检索qa 的值就足够了。

string quote = qarray[0]["q"].ToString();
string author = qarray[0]["a"].ToString();

Sample program

【讨论】:

    猜你喜欢
    • 2023-02-25
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多