2016-04-15 27 views
2

私は2つのjsonファイル、つまりStringを持っており、IDに基づいてそれらをマージしたい。 SQLの結合と同様です。これは一例です:2 JSONファイルをマージするNewtonsoft

これはJSON 1:

{ 
    "City": [{ 
     "CityId": 9, 
     "CityName": "Kukes" 
    }, { 
     "CityId": 18, 
     "CityName": "Tirana" 
    }, { 
     "CityId": 19, 
     "CityName": "Vlore" 
    }, { 
     "CityId": 22, 
     "CityName": "temp" 
    }] 
} 

そして、この私が2をJSON:

{ 
    "Citizen": [{ 
     "CitizenId": 38, 
     "CitizenLastName": "Bale", 
     "CitizenName": "Christian", 
     "City_Id": 19 
    }, { 
     "CitizenId": 39, 
     "CitizenLastName": "ttrtrt", 
     "CitizenName": "test", 
     "City_Id": 18 
    }, { 
     "CitizenId": 42, 
     "CitizenLastName": "Freeman", 
     "CitizenName": "Morgan", 
     "City_Id": 9 
    }, { 
     "CitizenId": 43, 
     "CitizenLastName": "Snow", 
     "CitizenName": "Jon", 
     "City_Id": 9 
    }, { 
     "CitizenId": 44, 
     "CitizenLastName": "test2", 
     "CitizenName": "test", 
     "City_Id": 9 
    }] 
} 

私はそれがこのようなIDに基づいて、JSONファイルまたは文字列にマージしたいです構造:

{ 
    "City": 
    [ 
     { 
      "CityId":9, 
      "CityName":"Kukes", 
      "Citizens" : [{"CitizenId":42,"CitizenLastName":"Freeman","CitizenName":"Morgan","City_Id":9},{"CitizenId":43,"CitizenLastName":"Snow","CitizenName":"Jon","City_Id":9},{"CitizenId":44,"CitizenLastName":"test2","CitizenName":"test","City_Id":9}] 
     }, 
     { 
      "CityId":18, 
      "CityName":"Tirana", 
      "Citizens" : [{"CitizenId":39,"CitizenLastName":"ttrtrt","CitizenName":"test","City_Id":18}] 
     }, 
     { 
      "CityId":19, 
      "CityName":"Vlore", 
      "Citizens" : [{"CitizenId":38,"CitizenLastName":"Bale","CitizenName":"Christian","City_Id":19}] 
     }, 
     { 
      "CityId":22, 
      "CityName":"temp", 
      "Citizens" : [] 
     } 
    ] 
} 

私は一日中試したが、まだ何も見つかりませんでした。あなたはNewtonsoftでこれをどうやってやるのか考えていますか?それとも他の方法ですか?しかし、私はnewtonsoftでそれを欲しいです。

+1

JSONのc#オブジェクト表現を作成し、NewtonsoftにオブジェクトにJSON文字列を入れ、LINQを使用して新しいオブジェクトに結合し、最後にNewtsonsoftを使用して新しいオブジェクトをJSONに再シリアル化することができます。 – mituw16

+2

これは大きな要件です。だから、あなたが作業しているときにあなたのコードはどうなりましたか? – Will

答えて

1

あなたは、特定の都市のためのすべての市民を見つけるために、ToLookup()を使用して、LINQ to JSONでこれを行うことができます。

var cities = JToken.Parse(cityJson); 
var citizens = JToken.Parse(citizenJson); 

var lookup = citizens.SelectTokens("Citizen[*]").ToLookup(c => (string)c["City_Id"]); 

foreach (var city in cities.SelectTokens("City[*]")) 
{ 
    city["Citizens"] = new JArray(lookup[(string)city["CityId"]]); 
} 

プロトタイプfiddle

ファイルからJSONを読み込み、後で保存する場合は、Read JSON from a fileWrite JSON to a fileを参照してください。

+0

あなたは私のヒーローです。出来た。ありがとうございました。 :D – coldfire

関連する問題