2016-07-29 35 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); 
}