Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索关键字&;使用C#代码的JSON中的值_C#_Json - Fatal编程技术网

搜索关键字&;使用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,已更改代码以字典的形式将值返回给调用方