首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个JTokens合并为一个

将两个JTokens合并为一个
EN

Stack Overflow用户
提问于 2016-06-10 20:24:15
回答 2查看 7.8K关注 0票数 8

如何将这两个JTokens合并成一个JToken。这听起来应该很简单,但却无法绕开它。

代码语言:javascript
复制
{
  "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

就像这样:

代码语言:javascript
复制
for (int page = 0; page <= recCount; page += 2000)
{
 //Get data
 pageOne = getJsonData();
 allPages.Concat(pageOne);
}
return allPages;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-10 20:46:44

您可以使用JContainer.Merge(Object, JsonMergeSettings)将一个JObject合并到另一个JObject。请注意,JsonMergeSettings.MergeArrayHandling可以控制如何合并数组。在 Enumeration documentation中,可能的合并选项是:

连接0个串联数组。Union 1联合数组,跳过已经存在的项。替换2替换所有数组项。合并3个合并数组项,按索引匹配。

因此,使用MergeArrayHandling.Concat进行合并,如下所示,其中allPagespageOne都是JContainer类型(或者一个子类,如JObject):

代码语言:javascript
复制
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;

给予:

代码语言:javascript
复制
{
  "data": [
    {
      "ID": "53a1862000404a304942546b35519ba3",
      "name": "Private Approval Process: Draft Document CPL",
      "objCode": "ARVPTH"
    },
    {
      "ID": "53a1838200401324eb1ec66562e9d77d",
      "name": "Private Approval Process: Draft Document CPL",
      "objCode": "ARVPTH"
    }
  ]
}

在使用Replace进行合并时,提供:

代码语言:javascript
复制
{
  "data": [
    {
      "ID": "53a1838200401324eb1ec66562e9d77d",
      "name": "Private Approval Process: Draft Document CPL",
      "objCode": "ARVPTH"
    }
  ]
}

如果变量是JToken类型的,则需要将它们转换为JContainer。(不能合并不是容器的JSON原语。)

JsonMergeSettings.MergeNullValueHandling根据需要控制是合并还是忽略null值。

票数 13
EN

Stack Overflow用户

发布于 2016-06-10 21:38:34

您可以这样合并它(或者如果将它包含在数组或列表中,您可以通过查询(例如ID属性上的查询)创建一个linq组,这同样有效)。

代码语言:javascript
复制
  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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37756656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档