如何将这两个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
。我有一个循环,带回多个页面,每个页面有三个字段。最终目标是获取每个页面并创建一个包含其中所有页面的大J Token
。
类似的东西:
for (int page = 0; page <= recCount; page += 2000)
{
//Get data
pageOne = getJsonData();
allPages.Concat(pageOne);
}
return allPages;
答案 0 :(得分:6)
您可以使用JContainer.Merge(Object, JsonMergeSettings)
将一个JObject
合并到另一个 Concat 0 Concatenate arrays.
Union 1 Union arrays, skipping items that already exist.
Replace 2 Replace all array items.
Merge 3 Merge array items together, matched by index.
上。请注意JsonMergeSettings.MergeArrayHandling
可以控制数组的合并方式。从MergeArrayHandling
Enumeration documentation开始,可能的合并选项是:
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;
):< / p>
{
"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
类型,则需要将它们转换为null
。 (不是容器的JSON原语不能合并。)
JsonMergeSettings.MergeNullValueHandling
可根据需要控制是合并还是忽略]
值。
答案 1 :(得分:0)
你可以像那样合并(或者如果你有它在数组或列表中,你可以通过查询建立一个linq组,例如通过ID属性,这同样有效)。
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();