2016-07-29 63 views
1

我正在處理一些合併我的json數組的問題。原來陣列將被合併與此類似:C#JObject沒有正確嵌套

{ 
    "ads":[ 
    { 
     "a1": "b1", 
     "i1": "j1", 
     "x1": "y1", 
    } 
    ] 
} 

{ 
    "ads": [ 
    { 
     "a2": "b2", 
     "i2": "j2", 
     "x2": "y2", 
    } 
    ] 
} 

我合併的結果類似於這樣:

{ 
    "ads:[ 
    [ 
     { 
     "a1": "b1", 
     "i1": "j1", 
     "x1": "y1", 
     } 
    ], 
    [ 
     { 
     "a2": "b2", 
     "i2": "j2", 
     "x2": "y2", 
     } 
    ] 
    ] 
} 

什麼我試圖削減下來的是:

{ 
    "ads:[ 
    { 
     "a1": "b1", 
     "i1": "j1", 
     "x1": "y1", 
    }, 
    { 
     "a2": "b2", 
     "i2": "j2", 
     "x2": "y2", 
    } 
    ] 
} 

正在用於嘗試合併兩者的代碼目前是這樣的:

 // Combine all ads within formattedContent into one single JOBject. 
     JToken token = null; 
     JArray jarray = new JArray(); 
     List<JToken> jtokens = new List<JToken>(); 
     foreach (JObject jobject in formattedContent) 
     { 
      token = JToken.Parse(jobject.SelectToken("ads").ToString());     
      jarray.Add(token); 
     } 

但是,當最終產品需要在一個數組下的「廣告」令牌中產生所有廣告時,我被困在雙重嵌套數組中。請注意,上面的代碼中的formattedContent是List<JObject>。任何幫助合併JSON數組將不勝感激。嘗試在將字符串添加到字符串之前將其添加到字符串中會導致回車和添加轉義字符(這些字符不會在調試器視圖中添加(正如我經常看到的那樣),它們實際上是體現在最終產品)

+0

你有過JSON格式的控制,或者是你不得不用你上面顯示的JSON工作? – Jonathan

+0

來自@dbc的評論是我一直在尋找的語法。不過,要回答你的問題,不,我只能通過一個外部API強制進入這種json格式,這迫使我只合併所有6000個廣告(每頁300個),因爲它們沒有經銷商功能搜索。 –

回答

0

你想要做的是增加token.Children()而非tokenjarray(即加token的內容,而不是token本身):

var jarray = new JArray(); 
foreach (var jobject in formattedContent) 
{ 
    var token = jobject.SelectToken("ads") as JArray; 
    if (token != null) 
     jarray.Add(token.Children()); 
} 

順便說一句,你可以實現對根對象使用JContainer.Merge()的效果相同,設置爲JsonMergeSettings.MergeArrayHandling = MergeArrayHandling.Concat

var merged = new JObject(); 
var settings = new JsonMergeSettings 
{ 
    MergeArrayHandling = MergeArrayHandling.Concat, 
}; 
foreach (var jobject in formattedContent) 
{ 
    merged.Merge(jobject, settings); 
}