2017-05-15 5 views
0

.NET 용 Newtonsoft JSON 라이브러리를 사용하는 데있어서 약간 새로운 기능입니다. JSONPath에서 JObject 또는 JToken을 만들 수있는 방법이 있습니까?JSONPath에서 JObject 빌드

예를 들면 다음과 같습니다.

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

결과는 다음과 같은 JObject 또는 JToken이됩니다. 당신은 어떤 기존의 JSON이있는 경우

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

답변

1

번호

, 당신은이 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)]과 같은 표현식은 무엇이 생성됩니까?