从 C# 中的 JSON 结构中提取数据
Extracting data from JSON structure in C#
JSON数据:
{
"return": {
"output01": "Test request success!!",
"output02": "test request"
}
}
C#代码:
JObject obj = JObject.Parse(jsonString);
JToken jToken = obj["return"];
foreach (JToken item in jToken)
{
string output1_param = item["output01"].ToString();
string output2_param = item["output02"].ToString();
}
想想重复的案例。
System.InvalidOperationException: 'Cannot access child value on
Newtonsoft.Json.Linq.JProperty.'
怎么了?
item
是一个 JProperty
,因此它不会 support 按对象键索引(例如 string
一个)。你需要 strip foreach
:
JToken jToken = obj["return"];
string output1_param = jToken["output01"].ToString();
string output2_param = jToken["output02"].ToString();
或使用 item
的 Values
,例如通过 First
:
foreach (JToken item in jToken)
{
Console.WriteLine(item.First.ToString());
}
在这种情况下,在 foreach
中转换为 JProperty
也是一个选项:
foreach (JProperty item in jToken)
{
Console.WriteLine($"{item.Name} - {item.Value}");
}
如您在 This Link 中所见,JToken 的索引器未实现,您的代码尝试使用 JToken 的索引器。
当您调用 jToken 的 GetEnumerator 时,在此示例中您将仅获得单个元素,即 JProperty,因此调用实现了 JToken 的 JProperty 的索引器(通过使用字符串键)将尝试使用该索引器并抛出异常。
如果你用这种方式调用会发生什么:
jToken["output01"].ToString();
在此模式中,您使用的是 JObject 的索引器,它遍历 JObject 的 ChildrenTokens 并为您提供值。
as Guru 表示您必须使用值字段读取值或使用第一个元素。
JSON数据:
{
"return": {
"output01": "Test request success!!",
"output02": "test request"
}
}
C#代码:
JObject obj = JObject.Parse(jsonString);
JToken jToken = obj["return"];
foreach (JToken item in jToken)
{
string output1_param = item["output01"].ToString();
string output2_param = item["output02"].ToString();
}
想想重复的案例。
System.InvalidOperationException: 'Cannot access child value on Newtonsoft.Json.Linq.JProperty.'
怎么了?
item
是一个 JProperty
,因此它不会 support 按对象键索引(例如 string
一个)。你需要 strip foreach
:
JToken jToken = obj["return"];
string output1_param = jToken["output01"].ToString();
string output2_param = jToken["output02"].ToString();
或使用 item
的 Values
,例如通过 First
:
foreach (JToken item in jToken)
{
Console.WriteLine(item.First.ToString());
}
在这种情况下,在 foreach
中转换为 JProperty
也是一个选项:
foreach (JProperty item in jToken)
{
Console.WriteLine($"{item.Name} - {item.Value}");
}
如您在 This Link 中所见,JToken 的索引器未实现,您的代码尝试使用 JToken 的索引器。
当您调用 jToken 的 GetEnumerator 时,在此示例中您将仅获得单个元素,即 JProperty,因此调用实现了 JToken 的 JProperty 的索引器(通过使用字符串键)将尝试使用该索引器并抛出异常。
如果你用这种方式调用会发生什么:
jToken["output01"].ToString();
在此模式中,您使用的是 JObject 的索引器,它遍历 JObject 的 ChildrenTokens 并为您提供值。
as Guru 表示您必须使用值字段读取值或使用第一个元素。