2013-11-15 2 views
0

Newtonsoft.Json을 사용하여이 json 문자열을 deserialize하려고했지만 원하는 출력을 얻지 못했습니다. 내 JSON 문자열은C#에서이 Json 문자열을 구문 분석 할 수 없습니다.

[ 
{ 
"id": 1, 
"key": "Residential Homeowner", 
"i18nText": "unknown message code DB_ENUM_UserType_residentialhomeowner", 
"i18nKey": "DB_ENUM_UserType_residentialhomeowner" 
}, 
{ 
"id": 8, 
"key": "VAR Dealer \/ Builder", 
"i18nText": "unknown message code DB_ENUM_UserType_vardealer\/builder", 
"i18nKey": "DB_ENUM_UserType_vardealer\/builder" 
}, 
{ 
"id": 2, 
"key": "Administrator", 
"i18nText": "unknown message code DB_ENUM_UserType_administrator", 
"i18nKey": "DB_ENUM_UserType_administrator" 
}, 
{ 
"id": 9998, 
"key": "TempGuidUser", 
"i18nText": "unknown message code DB_ENUM_UserType_tempguiduser", 
"i18nKey": "DB_ENUM_UserType_tempguiduser" 
}, 
{ 
"id": 9999, 
"key": "GuidUser", 
"i18nText": "unknown message code DB_ENUM_UserType_guiduser", 
"i18nKey": "DB_ENUM_UserType_guiduser" 
} 
] 

난 그냥 키의 값을 원하는 경우 ID = 1의 값. 일반적으로 json은 {} (중괄호)로 시작하지만 여기서는 [] (대괄호)과 같습니다. 나는 많은 예를 보았지만 나에게는 아무런 효과가 없었다.

+0

의 중복 가능성 http://stackoverflow.com/questions/18192357/deserializing-json-object-array-with-json- net) – James

답변

3

더 큰 JSON 값의 단일 값에만 관심이 있다면 Linq to JSON을 시도하면 모든 것을 직렬화하지 않고도 JSON을 통해 쿼리 할 수 ​​있습니다.

예 :

JArray values = JArray.Parse(json); 

string key; 
var keyObject = values.FirstOrDefault(p => (int)p["id"] == 1); 
if (keyObject != null) 
{ 
    key = (string)keyObject["key"]; 
} 
[Json.net와 역 직렬화 JSON 객체 어레이 (
+0

도 간단합니다. :) 감사 –

3

일반적으로 json은 {} (중괄호)로 시작하지만 여기서는 [] (대괄호)입니다.

이것은 하나의 개체가 아니라 개체 배열을 가지고 있기 때문입니다. 배열은 주위에 대괄호로 묶여 있습니다. 배열로 역 직렬화 한 다음 관심 인덱스에서 객체를 가져와야합니다.

+0

이 클래스를 사용해 보았습니다. 설정;} 공공 문자열 키 {얻을; 설정;} 공공 문자열 i18nText {얻을; 설정;} 공공 문자열 i18nKey {얻을 수 있지만 :( 공용 클래스 유저 유형 { 공공 문자열 ID {얻을 작동하지 않습니다; 설정;} } –

+0

을 클래스를 잘 JsonConvert.DeserializeObject '처럼 당신이 Newtonsoft의 디시리얼라이저 전화 않았다 어떻게 뭔가를'보이는 @SumitChourasia – dasblinkenlight

3

이 게시물은 C#에서 JSON 구문 분석을 처리하는 관련 게시물입니다. C# JSON Parsing. 괄호가 문제가있는 경우

, 단순히 사용 : ID가 1의 최소 값을 가질 수있는 경우

string json = inputJson.Trim().Trim('[',']'); 

는,이 작동합니다 :

string GetKey(string inputJson) 
{ 
    string key = inputJson.Substring(inputJson.IndexOf("key")+5); 
    key = key.Substring(key.IndexOf("\""), key.IndexOf(",")-key.IndexOf("\"")); 
    key = key.Trim('\"'); 
    return key; 
} 
+0

를 ID = 1 –

+0

의 값은 내가 대답을 편집 할 때 그냥 키의 값을합니다.?. –

+0

이것은 너무 복잡합니다. : ( –

1

[]는 JSON을 정의하는 것입니다 객체 배열. 출력은 배열이어야합니다. 배열을 통해 다음과 같이 이동하십시오.

for(var i=0; i<output.Length; i++) 
{ 
    if(output[i].id == "1") // desired id 
    { 
     Console.WriteLine(output[i].key);// use it as you wish 
    } 
} 

및 찾은 객체 key을 사용하십시오.

+0

난 그냥 당신에게 아이디어를주고 싶었어. f 당신이 어떻게 문제에 접근 할 것인가. @ ledbutter의 솔루션은 물론 이상적입니다.) –

관련 문제