组合字符串c#中的所有json路径

时间:2014-12-07 08:37:54

标签: c# json string path

我有一个大的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#一样动态地轰动并在屏幕上显示请告诉我一种方法来制作这个

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 

1 个答案:

答案 0 :(得分:1)

使用JSON.NET并通过Children属性递归迭代,并检查当前令牌是否没有将HasValues设置为true,如果是这种情况,则将该令牌的Path属性添加到StringBuilder或者你有什么。应该准确地给你你想要的东西。

伊迪丝:代码示例

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

Example on 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);
            }
        }

    }   
}