2017-01-13 14 views
0

JSON、サンプルがそうF1P1Xは、機能#1の点#1のX-値であるアレイ内でアレイを処理するにはどうすればよいですか?

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

下に含まれるIは、配列の配列の配列を有しています。ここで

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

次に、私は様々な配列を使用して文字列を構築する必要があります。最も内側の配列(フィーチャのポイント)を処理できるように、第2レベルの配列(フィーチャ)を取得するにはどうすればよいですか?最後はList<string>になります。各文字列はフィーチャー(JSONの2番目のレベルの配列)で、最も内側の配列はフィーチャーを作成するポイントです。私は文字列の操作を処理することができますが、まずJSONから配列を取得する必要があります。

+0

のこのLINQ文の戻りリスト... –

答えて

0

JSONを使用する場合は、Json.NETのnugetパッケージが最適です。私はあなたのためのテスト方法を作成しています。

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

有効なJSONではありません機能

List<string> result = arrays.SelectMany(x => x.SelectMany(y => y.Select(z => z.Feature))).ToList(); 
関連する問題