C# 获取嵌套的json元素将返回一个错误
我正在尝试创建一个与randomuser.MeAPI交互的应用程序 但这总是会返回某种错误,这次我使用在stackoverflow中找到的代码来解析json内容。 这是我现在的代码:C# 获取嵌套的json元素将返回一个错误,c#,.net,json,json.net,webclient,C#,.net,Json,Json.net,Webclient,我正在尝试创建一个与randomuser.MeAPI交互的应用程序 但这总是会返回某种错误,这次我使用在stackoverflow中找到的代码来解析json内容。 这是我现在的代码: public string GetJsonPropertyValue(string json, string query) { JToken token = JObject.Parse(json); foreach (string queryC
public string GetJsonPropertyValue(string json, string query)
{
JToken token = JObject.Parse(json);
foreach (string queryComponent in query.Split('.'))
{
token = token[queryComponent];
}
return token.ToString();
}
string getName()
{
string name = "";
try
{
using (WebClient wc = new WebClient())
{
var json = wc.DownloadString("https://randomuser.me/api/");
name = GetJsonPropertyValue(json, "results[0].name.first");
return name;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
return name;
}
}
我不知道到底是什么问题,但它返回了一个System.NullReferenceException
编辑
如果我没有在GetJsonPropretyValue group方法的第二个参数中插入索引,并以这种方式插入它results.name.first
它返回这样一个错误:
System.ArgumentException:访问的JArray值的键值无效:>“名称”。应为数组位置索引
位于Newtonsoft.Json.Linq.JArray.get_项(对象键)
当路径中有数组索引时,尝试将JSON路径拆分为点是行不通的。幸运的是,您不必使用自己的查询方法;内置方法完全满足您的要求:
using (WebClient wc = new WebClient())
{
var json = wc.DownloadString("https://randomuser.me/api/");
JToken token = JToken.Parse(json);
string firstName = (string)token.SelectToken("results[0].name.first");
string lastName = (string)token.SelectToken("results[0].name.last");
string city = (string)token.SelectToken("results[0].location.city");
string username = (string)token.SelectToken("results[0].login.username");
...
}
Fiddle:可能重复的,请参见Edit@dourhigharch原始JSON字符串是什么样子的?谢谢,这与预期的效果完全一样。很高兴我能提供帮助。