2014-12-07 27 views
0

我有一个大型的json数据,我想从根获得所有路径,直到获得路径的值,然后将结果存储到字符串,如我所述的波纹管 这里是我的json例如结合在字符串c中的所有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

人们暗示的东西给你,然后你和你问,但它能做大约Y X或什么哪里是你的代码 - 你尝试过什么,当你尝试的事情会发生什么向您建议 - 您是否尝试过使用提供给您的想法进行尝试,然后进行调试以了解您可以做什么。你做了什么 ??? – 2014-12-07 09:05:24

+0

感谢您的建议,但我尝试过自己的想法,如果你看到这样一句: 字符串值=(字符串)目标文件[“四”] [“价值”]; 这一个你可以适用于包含20000个不同节点和路径的json数据吗? 如果你能做到这一点,请帮助我。 – 2014-12-07 09:30:00

+0

那么你真的应该表现出蚂蚁当前的例子,让人们能看到你得和你试过的东西,这样你就不会浪费时间出现,他们可以给你更多有用的答案。 @Ibn给了你唯一真正的答案,它将用于树中只有在运行时才会被知道的节点的大量(可变)数量的行。和那个递归。 – 2014-12-08 10:07:33

回答

1

使用JSON.NET并通过儿童特性的递归遍历每个路径和检查当前令牌是否没有HasValues se t为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); 
      } 
     } 

    } 
} 
+0

谢谢你,我觉得你的想法可以工作,但我需要的代码, 如果你有时间给我的代码,我很感激它。 – 2014-12-07 09:02:15

+0

当我在某个电脑附近时,会添加一个示例。 – 2014-12-07 09:08:56

+0

太感谢你了 – 2014-12-07 09:35:55