2014-12-07 26 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