2017-05-15 5 views
0

私は、Newtonsoft JSONライブラリを.NET用に少し使いました。 JSONPathからJObjectまたはJTokenを作成する方法はありますか?JSONPathからJObjectを構築してください

たとえば、次のようなものです。

string jsonPath = "$.ArrayA[0].ArrayB[0].Property"; 
JObject jObj = JObject.FromJSONPath(jsonPath); // SOMETHING LIKE THIS 

結果は、次のようなJObjectまたはJTokenになります。

{ 
    "ArrayA": [{ 
     "ArrayB": [{ 
      "Property": "" 
     }] 
    } 
} 

答えて

1

あなたには、いくつかの既存のJSONを持っている場合は、JTokenにそれを解析し、JsonPath expressionSelectTokenまたはSelectTokensを使用して、それから一つ以上の子孫JTokensを選択することができます。例:

string json = @"{ ""ArrayA"": [{ ""ArrayB"": [{ ""Property"": ""foo"" }] }] }"; 
JToken token = JToken.Parse(json); 
JToken fooToken = token.SelectToken("$..Property"); 
Console.WriteLine(fooToken.ToString()); // prints "foo" 

また、JTokensのネスト構造を手動で構築することもできます。たとえば、あなたはこのようにあなたの質問にJOBJECTを作成することができます。

var obj = new JObject(new JProperty("ArrayA", new JArray(
      new JObject(new JProperty("ArrayB", new JArray(
       new JObject(new JProperty("Property", "")))))))); 

しかし、JsonPath式が、何からJTokenを作成するための組み込みの方法はありません。あなたはそれのようなことをする独自のメソッドをロールバックする必要があります。しかし、JsonPathはクエリメカニズムとして設計されていることに留意してください。新しいオブジェクトの作成にきれいにマップされません。ここでは、あなたが考える必要があるだろういくつかの問題です:あなたの例の表現、$.ArrayA[0].ArrayB[0].Property

  • は、Propertyはどのようなタイプですか?文字列、数値、ブール値、オブジェクト、または空の配列ですか?どのように指定しますか?
  • 複数のプロパティを持つオブジェクトの作成をどのように指定しますか?
  • $..book[(@.length-1)]のような表現はどのように作成されますか?
関連する問題