2017-01-13 9 views
0

Ich habe ein Array von Arrays von Arrays als JSON- einer Probe unter enthalten woWie verarbeite ich Arrays innerhalb eines Arrays?

F1 = Feature #1 
P1 = Point #1 
X/Y = Coordinates 

F1P1X so ist der X-Wert von Punkt # 1 von der Funktion # 1.

[ 
    [ 
     [F1P1X,F1P1Y,null], 
     [F1PnX,F1PnY,null] 
    ], 
    [ 
     [F2P1X,F2P1Y,null], 
     [F2PnX,F2PnY,null] 
    ], 
    [ 
     [FnP1X,FnP1Y,null], 
     [FnPnX,FnPnY,null] 
    ] 
] 

Hier ist der Code Ich verwende die oben JSON aus einer Datei zu erhalten:

string json = File.ReadAllText("ABC.json"); 
JObject obj = JObject.Parse(json); 
JToken token = obj.SelectToken("$.features[?(@.name == 'X')]['XY']"); 
var paths = JToken.Parse(token.ToString()).SelectToken("XYZ"); 

Als nächstes muss ich mit den verschiedenen Arrays Strings bauen. Wie bekomme ich das Array der zweiten Ebene (das Feature), damit ich die innersten Arrays (Punkte auf den Features) verarbeiten kann? Das Ende wird List<string> sein, wobei jeder String ein Feature (Array der zweiten Ebene im JSON) und das innerste Array die Punkte sind, die das Feature ausmachen. Ich kann mit der String-Manipulation umgehen, aber zuerst muss ich die Arrays aus dem JSON entfernen.

+0

, die nicht gültig JSON ist ... –

Antwort

0

Gute Wahl ist Json.NET nuget-Paket für die Arbeit mit JSON. Ich habe eine Testmethode für Sie erstellt.

//Read your json file 
string json = File.ReadAllText("ABC.json"); 
//deserialize 
F1P1X[][][] yourArrayOfArraysOfArrays = JsonConvert.DeserializeObject<F1P1X[][][]>(json).ToList(); 

    public class F1P1X 
    { 
    public string Feature { get; set; } 
    public string Point { get; set; } 
    public string Coordinates { get; set; } 
    } 

    public static void Test() 
    { 
    F1P1X[] test1Array = new[] 
    { 
     new F1P1X 
     { 
      Feature = "F1", 
      Point = "P1", 
      Coordinates = "X1" 
     }, 
     new F1P1X 
     { 
      Feature = "F2", 
      Point = "P2", 
      Coordinates = "X2" 
     }, 
    }; 

    F1P1X[] test2Array = new[] 
    { 
     new F1P1X 
     { 
      Feature = "F3", 
      Point = "P3", 
      Coordinates = "X3" 
     }, 
     new F1P1X 
     { 
      Feature = "F4", 
      Point = "P4", 
      Coordinates = "X4" 
     }, 
    }; 

    F1P1X[][] test = {test1Array, test2Array}; 
    F1P1X[][] test2 = { test1Array, test2Array }; 
    F1P1X[][][] top = {test, test2}; 

    //array of arrays of arrays as JSON 
    string json = JsonConvert.SerializeObject(top); 
    List<F1P1X[][]> arrays = JsonConvert.DeserializeObject<F1P1X[][][]>(json).ToList(); 

    foreach (F1P1X[][] item in arrays) 
    { 
     foreach (F1P1X[] f1P1X in item) 
     { 
      foreach (F1P1X p1X in f1P1X) 
      { 
       //do some magic 
      } 
     } 
    } 


    // or use linq 
    var result = arrays.SelectMany(x => x.SelectMany(y => y.Where(z => z.Coordinates == "X1"))); 
    } 

Diese Linq-Anweisung gibt Liste der Features

List<string> result = arrays.SelectMany(x => x.SelectMany(y => y.Select(z => z.Feature))).ToList(); 
Verwandte Themen