2017-01-13 2 views
0

У меня есть массив массивов массивов как JSON, образец приведен ниже, гдеКак обрабатывать массивы в массиве?

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

F1P1X так это Х-значение точки # 1 функции # 1.

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

Вот код, я использую, чтобы получить над JSON из файла:

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

Далее, мне нужно построить строки, используя различные массивы. Как получить массив второго уровня (функция), чтобы я мог обрабатывать его самые внутренние массивы (точки на функциях)? Конец будет List<string>, где каждая строка является функцией (массив второго уровня в JSON), а самый внутренний массив - это точки, которые делают эту функцию. Я могу обрабатывать манипуляции с строкой, но сначала мне нужно получить массивы из JSON.

+0

Это не действительный JSON ... –

ответ

0

Хороший выбор - пакет Jug.NET nuget для работы с JSON. У меня есть метод тестирования для вас.

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

Этот список LINQ оператор возвращает функций

List<string> result = arrays.SelectMany(x => x.SelectMany(y => y.Select(z => z.Feature))).ToList(); 
Смежные вопросы