2017-12-31 70 views
-3

다음 JSON 문자열이 있습니다. C#을 사용하여 ID를 추출하는 가장 좋은 방법은 무엇입니까?json 문자열에서 추출 ID

{ 
    "count":1, 
    "value": [ { 
     "id":35, 
     "projectId": "frfsdf-039a-405b-8835-5ddb00cfsdf9f107", 
     "name":"Default", 
     "pool":{ 
      "id":1, 
      "scope":"8850710d-4558-4f08-8064-38000a03d209", 
      "name":"Default", 
      "isHosted":false, 
      "poolType":"automation" 
     } 
    }] 
} 
+3

http://idownvotedbecau.se/noattempt/ – Amy

+1

[JSON 응답을 구문 분석하는 가장 쉬운 방법] (https://stackoverflow.com/q/34043384/3744182)을 참조하십시오. – dbc

+1

[이 스레드] (https://stackoverflow.com/questions/16459155/how-to-access-json-object-in-c-sharp)를 확인해 보겠습니다. 귀하의 질문에 대답해야합니다! –

답변

2

하면 Newtonsoft.Json 사용 :

JObejct.Parse(str)["value"].First()["id"].Value<string>()

Newtonsoft는 json을 C#으로 처리하는 꽤 많은 방법입니다.

배열에 항목이 두 개 이상있을 수 있습니다. 이 코드는 첫 번째 코드입니다.

+1

아마도 FirstOrDefault()를 먼저 호출 한 다음 null이 아닌지 테스트합니다. 컬렉션이 비어 있으면 First()로 인해 응용 프로그램이 실패 할 수 있습니다. 이것 이외에 이것은 좋은 대답이다. –

2

컴파일 타임 타입 안전성 잃을 때문에 개인적으로 dynamic를 사용하여 반대하고있어 C# dynamic

using Newtonsoft.Json; 

Int32 GetId() 
{ 
    String jsonStr = "{ \"count\":..."; 

    dynamic jsonBlob = JObject.Parse(jsonStr); 
    return jsonBlob.value[0].id; 
} 

사용 주 -cheapest 방법하여야 할 개발자 시간, dynamic 는 단일 사용 작업에 다소 비싸기 때문에 Json.NET 자체의 토큰 객체를 사용하여 처리하려고 할 수 있습니다.

JObject root = JObject.Parse(jsonStr); 
JToken idToken = root.Properties["value"].GetChildren().First().Properties["id"]; 
return idToken.ToObject<Int32>(); 

마지막으로, 당신은 항상 자신의 클래스를 정의하고 그 방법을 역 직렬화 수 :

class Foo { 
    public Int32 Count { get; set; } 
    public FooValue[] Value { get; set; } 
} 
class FooValue { 
    public Int32 Id { get; set; } 
    public Guid ProjectId { get; set; } 
    public String Name { get; set; } 
} 

Foo foo = JsonConvert.Deserialize<Foo>(jsonStr); 
return foo.Value[0].Id; 

를 JSON 형식은 항상 일관성이 경우 당신은 다음 Newtonsoft에 대한 종속성을 피할 수있는 다른 JSON을 처리 할 수 ​​없습니다. 정규 표현식 또는 단순 문자열 처리를 사용하여 JSON (Json.NET는)

Int32 idIdx = jsonStr.IndexOf("\"id\":"); 
if(idIdx == -1) return null; 
Int32 commaIdx = jsonStr.IndexOf(",", idIdx); 
if(commaIdx == -1) return null; 
return jsonStr.Substring(idIdx, commaIdx - idIdx);