合并字符串 C# 中的所有 JSON 路径

本文关键字:JSON 路径 字符串 合并 | 更新日期: 2023-09-27 18:33:20

我有一个很大的 JSON 数据,我想从根获取所有路径,直到获取路径的值,然后将结果存储到字符串中,如我在下面描述的那样例如,这是我的 JSON

{  
   "root":{  
      "first":{  
         "first1":{  
            "value":"1"
         },
         "first2":{  
            "value":"2"
         },
         "first3":{  
            "value":"3"
         }
      },
      "second":{  
         "second1":{  
            "value":"1"
         },
         "second2":{  
            "value":"2"
         },
         "second3":{  
            "value":"3"
         }
      },
      "third":{  
         "third1":{  
            "value":"1"
         },
         "third2":{  
            "value":"2"
         },
         "third3":{  
            "value":"3"
         }
      },
      "four":{  
         "value":"4"
      },
      "five":{  
         "five1":{  
            "five11":{  
               "value":"five11"
            },
            "five12":{  
               "value":"five12"
            }
         },
         "five2":{  
            "five21":{  
               "five211":{  
                  "value":"five211"
               }
            }
         }
      }
   }
}

然后我想在 C# 中动态制作每个路径,例如 bellow 并显示在屏幕中,请告诉我一种方法

root.first.first1.value
root.first.first2.value
root.first.first3.value
root.second.second1.value
......
root.four.value
root.five.five1.five11.value
root.five.five1.five12.value
....
root.five2.five21.five211.value 

合并字符串 C# 中的所有 JSON 路径

使用 JSON.NET 并以递归方式循环访问 Children 属性,并检查当前令牌是否未将 HasValues 设置为 true,如果是这种情况,请将该令牌的 Path 属性添加到 StringBuilder 或您拥有的内容。应该给你你想要的。

伊迪丝:代码示例

我很懒,只包含整个控制台应用程序代码。

dotnetfiddle.net 示例

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text;
public class Program
{
    public static void Main()
    {
            var json = @"
{  
   ""root"":{  
      ""first"":{  
         ""first1"":{  
            ""value"":""1""
         },
         ""first2"":{  
            ""value"":""2""
         },
         ""first3"":{  
            ""value"":""3""
         }
      }
    }
}";
        var jobject = JObject.Parse (json);
        var sb = new StringBuilder ();
        RecursiveParse (sb, jobject);
        Console.WriteLine (sb.ToString());
    }
    public static void RecursiveParse(StringBuilder sb, JToken token)
    {
        foreach (var item in token.Children()) {
            if (item.HasValues)
            {
                RecursiveParse (sb, item);
            } else {
                sb.AppendLine (item.Path);
            }
        }
    }   
}