搜索关键字&;使用C#代码的JSON中的值
我有以下建议:搜索关键字&;使用C#代码的JSON中的值,c#,json,C#,Json,我有以下建议: { "Company": { "tech": { "star": "abc.com", "star1": "def.com", "star2": "ghi.com" }, "non tech": { "graphic": "media.com", "content": "xyz.com" }, "City
{
"Company": {
"tech": {
"star": "abc.com",
"star1": "def.com",
"star2": "ghi.com"
},
"non tech": {
"graphic": "media.com",
"content": "xyz.com"
},
"City": "City1.com",
},
}
我正在使用下面的代码读取json文件,但目前无法递归读取并达到内部级别
对于上述示例,我只能获取第一级键和值,for循环运行2次,每当遇到链接时,我必须将其添加到dictionary中,但为此,我必须达到内部级别:
string jsonFilePath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory.ToString(), "demo.json");
string json = File.ReadAllText(jsonFilePath);
Elements= (JObject)JsonConvert.DeserializeObject(json);
// await context.PostAsync(dictObj.Keys());
findJsonValues(Elements)
private Dictionary<string, string> findJsonValues(JObject Cat)
{
foreach (var pair in Cat)
{
string sKey = pair.Key;
// string ln = pair.Value.ToString();
string ss = Cat[sKey].ToString();
if (ss.StartsWith("https"))
{
//Add the catalogue and link to this dictionary to create final card
Console.WriteLine("Hey");
Link = ss;
//return Link;
// Cat = null;
// break;
linkDictionary.Add(sKey,ss);
jsonIntentLimit++;
if (jsonIntentLimit == 3)
{
//call a function
}
continue;
}
jsonValues(context,(JObject)pair.Value);
}
}
string jsonFilePath=System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory.ToString(),“demo.json”);
字符串json=File.ReadAllText(jsonFilePath);
Elements=(JObject)JsonConvert.DeserializeObject(json);
//wait context.PostAsync(dictObj.Keys());
FindJSON值(元素)
专用字典findJsonValues(JObject Cat)
{
foreach(Cat中的var对)
{
字符串sKey=pair.Key;
//字符串ln=pair.Value.ToString();
字符串ss=Cat[sKey].ToString();
如果(ss.StartsWith(“https”))
{
//将目录和链接添加到此词典以创建最终卡片
控制台。WriteLine(“嘿”);
Link=ss;
//返回链接;
//Cat=null;
//中断;
linkDictionary.Add(sKey,ss);
jsonIntentLimit++;
如果(jsonIntentLimit==3)
{
//调用函数
}
持续
}
jsonValues(context,(JObject)pair.Value);
}
}
请提供帮助。使用此功能递归迭代所有节点
private static void Iterate(JToken token, Dictionary<string, string> keyValuePairs)
{
if (token is JProperty && token.First is JValue)
{
if (!keyValuePairs.ContainsKey(((JProperty)token).Name))
keyValuePairs.Add(((JProperty)token).Name, ((JProperty)token).Value.ToString());
}
foreach (JToken token2 in token.Children())
Iterate(token2, keyValuePairs);
}
private static void Iterate(JToken令牌、字典keyValuePairs)
{
if(令牌是JProperty&&token。第一个是JValue)
{
if(!keyValuePairs.ContainsKey(((JProperty)token.Name))
添加(((JProperty)标记).Name,((JProperty)标记.Value.ToString());
}
foreach(token.Children()中的JToken token2)
迭代(令牌2,keyValuePairs);
}
调用此方法以获取所有节点
using (StreamReader r = new StreamReader(filepath))
{
string json = r.ReadToEnd();
JToken token = JToken.Parse(json);
var keyValuePairs = new Dictionary<string, string>();
Iterate(token, keyValuePairs);
foreach (var keyValue in keyValuePairs)
{
Console.WriteLine($"{keyValue.Key}:{keyValue.Value}");
}
}
使用(StreamReader r=newstreamreader(filepath))
{
字符串json=r.ReadToEnd();
JToken token=JToken.Parse(json);
var keyValuePairs=新字典();
迭代(令牌、keyValuePairs);
foreach(keyValuePairs中的var keyValue)
{
WriteLine($“{keyValue.Key}:{keyValue.Value}”);
}
}
当前无法递归读取
您能告诉我们您尝试递归读取此文件吗?我在您当前的代码中没有看到递归。添加了递归部分。如果上面的json
中的(ss.StartsWith(“https”)
non满足这一点,您希望发生什么?你想确定它是某种有效的url还是什么吗?谢谢你的代码,如何返回调用函数。当我使用returninsiderecursive函数从主代码返回调用点时,它不会返回到调用点,而是再次调用iterate函数。函数iterateJson(){//迭代json并收集值,然后返回值此返回调用相同的函数again@AllTech,已更改代码以字典的形式将值返回给调用方