2016-04-15 15 views
2

Ich habe 2 JSON-Dateien oder String und ich möchte sie basierend auf ID zusammenführen. Wie beitreten auf SQL. Dies ist das Beispiel:2 JSON-Dateien zusammenführen Newtonsoft

Dies ist Json 1:

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

Und die i json 2:

{ 
    "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 
    }] 
} 

ich es will, basierend auf ID in einer JSON-Datei oder eine Zeichenfolge fusionieren, wie dies Struktur:

{ 
    "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" : [] 
     } 
    ] 
} 

Ich habe den ganzen Tag versucht und immer noch nichts gefunden. Hast du eine Idee, wie man das mit Newtonsoft macht? Oder anders? Aber ich würde es mit newtonsoft mögen.

+1

Sie können C# -Objektdarstellungen Ihres JSON erstellen und Newtonsoft die JSON-Zeichenfolgen in die Objekte einfügen, dann LINQ verwenden, um Ihre Verbindung zu einem neuen Objekt herzustellen, und schließlich Newtsonsoft verwenden, um Ihr neues Objekt erneut in JSON zu serialisieren. – mituw16

+2

Das ist eine große Anforderung. Was ist mit deinem Code passiert, als du daran gearbeitet hast? – Will

Antwort

1

Sie können dies tun, mit LINQ to JSON, ToLookup() unter Verwendung aller Bürger für eine bestimmte Stadt zu finden:

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"]]); 
} 

Prototype fiddle.

Um Ihren JSON aus einer Datei zu laden und später zurückzuspeichern, siehe Read JSON from a file und Write JSON to a file.

+0

du bist mein Held. Es funktionierte. Danke. : D – coldfire

Verwandte Themen