2016-06-10 12 views
2

Wie kann ich diese zwei JTokens in einem einzigen JToken zusammenführen. Das hört sich so an, als sollte es einfach sein, aber ich kann mich nicht damit herumschlagen.Zusammenführen von zwei JTokens zu einem

{ 
    "data":[ 
    { 
     "ID":"53a1862000404a304942546b35519ba3", 
     "name":"Private Approval Process: Draft Document CPL", 
     "objCode":"ARVPTH" 
    }] 
} 

{ 
"data":[ 
    { 
     "ID":"53a1838200401324eb1ec66562e9d77d", 
     "name":"Private Approval Process: Draft Document CPL", 
     "objCode":"ARVPTH" 
    }] 
} 

Danke für die Hilfe!

Das ist, was ich bisher versucht habe:

ich dann durch die Zuordnung des ersten Objekts auf eine Variable Jtoken pageOne begann, habe ich versucht, es in eine zweite Variable JToken allPages verketten. Ich habe eine Schleife, die mehrere Seiten mit jeweils drei Feldern zurückbringt. Das Endziel ist es, jede Seite zu erfassen und eine große J Token mit allen Seiten darin zu erstellen.

etwas wie folgt aus:

for (int page = 0; page <= recCount; page += 2000) 
{ 
//Get data 
pageOne = getJsonData(); 
allPages.Concat(pageOne); 
} 
return allPages; 
+0

Was ist mit dem Erstellen von JToken [] Array? –

+0

Welche Anstrengung haben Sie unternommen, um es zu erreichen, bieten Sie eine Probe auf, was Sie bisher getan haben. – din

Antwort

3

können Sie JContainer.Merge(Object, JsonMergeSettings) verwenden Sie eine JObject auf einen anderen zu verschmelzen. Beachten Sie, dass JsonMergeSettings.MergeArrayHandling Kontrolle darüber gibt, wie Arrays zusammengeführt werden. Vom MergeArrayHandling Enumeration documentation, sind die möglichen merge Möglichkeiten:

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. 

verschmelzenden So MergeArrayHandling.Concat Verwendung wie folgt, wobei allPages und pageOne beiden Typen sind JContainer (oder eine Unterklasse, wie 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; 

gibt:

{ 
    "data": [ 
    { 
     "ID": "53a1862000404a304942546b35519ba3", 
     "name": "Private Approval Process: Draft Document CPL", 
     "objCode": "ARVPTH" 
    }, 
    { 
     "ID": "53a1838200401324eb1ec66562e9d77d", 
     "name": "Private Approval Process: Draft Document CPL", 
     "objCode": "ARVPTH" 
    } 
    ] 
} 

Bei der Verwendung von Replace Verschmelzung ergibt:

{ 
    "data": [ 
    { 
     "ID": "53a1838200401324eb1ec66562e9d77d", 
     "name": "Private Approval Process: Draft Document CPL", 
     "objCode": "ARVPTH" 
    } 
    ] 
} 

Wenn Ihre Variablen vom Typ sind JToken Sie sie JContainer müssen werfen. (JSON-Grundelemente, die keine Container sind, können nicht zusammengeführt werden.)

JsonMergeSettings.MergeNullValueHandling gibt die Kontrolle darüber, ob die Werte null nach Bedarf zusammengeführt oder ignoriert werden sollen.

+0

Klingt gut! Was ich wirklich brauche, ist der Concat. Wie würdest du das schreiben? Wäre es in etwa so: 'object1.Concat (object2);' – JoseStack

+0

@JoseStack - ein Beispiel-Aufruf hinzugefügt. – dbc

+0

Aus irgendeinem Grund 'JContainer AllPages;.' 'AllPages ****' geben mich nicht die Option Zusammenführen ... bin ich etwas fehlt? – JoseStack

0

Sie könnten es so zusammenführen (oder wenn Sie es in einem Array oder einer Liste hatten, könnten Sie eine linq-Gruppe durch Abfrage zum Beispiel über die ID-Eigenschaft machen, das wäre ebenfalls effektiv).

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(); 
Verwandte Themen