2016-07-29 16 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", 
    } 
    ] 
} 

2つをマージするために使用されているコードは、現在は次のとおりです。

 // 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); 
     } 

しかし、最終製品が1つの配列の下にある "ads"トークン内のすべての広告を生成する必要があるときは、二重に入れ子になった配列が残っています。上記のコードのformattedContentはList<JObject>です。 json配列をマージする際の助けに感謝します。トークンをJArrayに追加する前に文字列にトークンを追加しようとすると、キャリッジリターンとエスケープ文字が追加されます(これはデバッガビューでは追加されません。最終製品)に反映

+0

json形式を制御できますか、上記のjsonで作業する必要がありますか? – Jonathan

+0

@dbcのコメントは、私が探していた構文です。しかし、あなたの質問に答えるために、私は外部APIによってこのjson形式に強制されています。これは、ディーラー機能による検索がないため、6000個の広告すべてを(300ページで)マージするよう強制しています。 –

答えて

0

やりたいこと(すなわち、むしろtokenそのもの)よりtokenの内容を追加しtoken.Children()ではなく、jarraytokenを追加することです:

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()を使用して同じ効果を設定し、設定値はです:

var merged = new JObject(); 
var settings = new JsonMergeSettings 
{ 
    MergeArrayHandling = MergeArrayHandling.Concat, 
}; 
foreach (var jobject in formattedContent) 
{ 
    merged.Merge(jobject, settings); 
} 
関連する問題