gpt4 book ai didi

c# - Newtonsoft JSON 在运行时获取特定的嵌套属性

转载 作者:行者123 更新时间:2023-11-30 20:44:14 24 4
gpt4 key购买 nike

如何在运行时从 JSON 对象中获取特定嵌套属性的值?这是一个说明我正在尝试做的事情的例子(没有错误检查,因为它只是一个简单的例子):

JSON 对象:

string jsonobj = "{ 
"Header":"someHeader",
"FirstNest":{
"Property1":"123",
"property2":"321",
"SecondNest":{
"property3":"456",
"property4":"789"
}
}

在我的代码中,我会有这样的东西:

string read = Console.ReadLine();

用户将输入的位置,例如 FirstNest.Property1 然后我将返回 123。我可以这样做:

JObject msg = JObject.Parse(jsonobj);
string[] tosearch = read.Split('.'); // This would give me FirstNest Property1
string tofind = (string)msg[tosearch[0]][tosearch[1]];

当用户想要访问FirstNest.SecondNest.property3 时,问题就出现了,因为我的硬编码方法只能接受两个字符串。我如何在运行时构建这样一个“查询”方法,使用户能够搜索任何属性?一个解决方案是创建一个函数

GetProperty(JObject msg, string str1, string str2)
{
return (string)msg[str1][str2];
}

然后是另一个,它将 3 个字符串作为输入:

GetProperty(JObject msg, string str1, string str2, string str3)
{
return (string)msg[str1][str2][str3];
}

,然后是另一个,它将 4 个字符串作为输入,等等……这似乎不是一个有效的解决方案。

最佳答案

这个怎么样(为简洁起见排除了异常处理):

public string GetJsonPropertyValue(string json, string query)
{
JToken token = JObject.Parse(json);

foreach(string queryComponent in query.Split('.'))
{
token = token[queryComponent];
}
return token.ToString();
}

给定示例中的 json,搜索此 FirstNest.SecondNest.property3 将返回 456。您应该包括任何必要的用户输入验证和异常处理。

关于c# - Newtonsoft JSON 在运行时获取特定的嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29653065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com