如何将这两个JTokens合并成一个JToken。这听起来应该很简单,但却无法绕开它。
{
"data":[
{
"ID":"53a1862000404a304942546b35519ba3",
"name":"Private Approval Process: Draft Document CPL",
"objCode":"ARVPTH"
}]
}
{
"data":[
{
"ID":"53a1838200401324eb1ec66562e9d77d",
"name":"Private Approval Process: Draft Document CPL",
"objCode":"ARVPTH"
}]
}谢谢你的帮助!
这就是我迄今尝试过的:
我首先将第一个对象分配给变量Jtoken pageOne,然后尝试将其连接到第二个变量JToken allPages中。我有一个循环,返回多个页面,每个页面都有三个字段。最后的目标是抓取每个页面并创建一个包含所有页面的大JToken。
就像这样:
for (int page = 0; page <= recCount; page += 2000)
{
//Get data
pageOne = getJsonData();
allPages.Concat(pageOne);
}
return allPages;发布于 2016-06-10 20:46:44
您可以使用JContainer.Merge(Object, JsonMergeSettings)将一个JObject合并到另一个JObject。请注意,JsonMergeSettings.MergeArrayHandling可以控制如何合并数组。在 Enumeration documentation中,可能的合并选项是:
连接0个串联数组。Union 1联合数组,跳过已经存在的项。替换2替换所有数组项。合并3个合并数组项,按索引匹配。
因此,使用MergeArrayHandling.Concat进行合并,如下所示,其中allPages和pageOne都是JContainer类型(或者一个子类,如JObject):
JContainer allPages = null;
var settings = new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat };
for (int page = 0; page <= recCount; page += 2000)
{
//Get data
var pageOne = (JContainer)getJsonData(page);
if (allPages == null)
allPages = pageOne;
else
allPages.Merge(pageOne, settings);
}
return allPages;给予:
{
"data": [
{
"ID": "53a1862000404a304942546b35519ba3",
"name": "Private Approval Process: Draft Document CPL",
"objCode": "ARVPTH"
},
{
"ID": "53a1838200401324eb1ec66562e9d77d",
"name": "Private Approval Process: Draft Document CPL",
"objCode": "ARVPTH"
}
]
}在使用Replace进行合并时,提供:
{
"data": [
{
"ID": "53a1838200401324eb1ec66562e9d77d",
"name": "Private Approval Process: Draft Document CPL",
"objCode": "ARVPTH"
}
]
}如果变量是JToken类型的,则需要将它们转换为JContainer。(不能合并不是容器的JSON原语。)
JsonMergeSettings.MergeNullValueHandling根据需要控制是合并还是忽略null值。
发布于 2016-06-10 21:38:34
您可以这样合并它(或者如果将它包含在数组或列表中,您可以通过查询(例如ID属性上的查询)创建一个linq组,这同样有效)。
var data1 = JObject.Parse(@"{
'data':[
{
'ID':'53a1862000404a304942546b35519ba3',
'name':'Private Approval Process: Draft Document CPL',
'objCode':'ARVPTH'
}]
}");
var data2 = JObject.Parse(@"{
'data':[
{
'ID':'53a1862000404a304942546b35519ba3',
'name':'Private Approval Process: Draft Document CPL',
'objCode':'ARVPTH'
}]
}");
data1.Merge(data2, new JsonMergeSettings
{
MergeArrayHandling = MergeArrayHandling.Union
});
string json = data1.ToString();https://stackoverflow.com/questions/37756656
复制相似问题