2013-07-12 4 views
32

문자열이있어서 그 값을 가져 오려고합니다.C#에서 JSON 문자열의 값을 가져 오는 방법은 무엇입니까?

내 문자열처럼 보인다 :

문자열 1 :

"{\r\n \"id\": \"100000280905615\", 
\r\n \"name\": \"Jerard Jones\", 
\r\n \"first_name\": \"Jerard\", 
\r\n \"last_name\": \"Jones\", 
\r\n \"link\": \"https://www.facebook.com/Jerard.Jones\", 
\r\n \"username\": \"Jerard.Jones\", 
\r\n \"gender\": \"female\", 
\r\n \"locale\": \"en_US\"\r\n}" 

문자열 2 :

"{\r\n \"id\": \"100000390001929\", 
    \r\n \"name\": \"\\u05d1\\u05d2\\u05e8\\u15dc\\u25d9 \\u05d1\\u05e8\\u05d5\\u05e9\", 
    \r\n \"first_name\": \"\\u05d4\\u05d2\\u05e7\\u02dc\\u05d9\", 
    \r\n \"last_name\": \"\\u05d1\\u05e8\\u05d5\\u05e9\", 
    \r\n \"link\": "https://www.facebook.com/people/\\u05d2\\u05d1\\[email protected]\\u05dc\\u05d9-\\u05d1\\u05e8\\u05d4\\u05e9/100000390001929\", 
    \r\n \"gender\": \"female\", 
    \r\n \"locale\": \"he_IL\"\r\n}" 

불행하게도,이 문자열이 동일한 개념으로 될 것입니다 상황이지만, 몇 가지 않고 매개 변수 :

string3 :

"{\r\n \"id\": \"100000390001929\", 
    \r\n \"last_name\": \"\\u05d1\\u05e8\\u05d5\\u05e9\", 
    \r\n \"gender\": \"female\", 
    \r\n \"locale\": \"he_IL\"\r\n}" 

어떻게의 값을 얻을 수 있습니다 : id, first_name, last_name, gender, locale을?

도움을 주셨습니다.

+13

[JSON parser] (https://www.google.co.uk/search?q=c%23+parse+json)가 필요합니다. – Rawling

+0

Regex 또는 JSON 라이브러리를 사용하고 싶습니다. 최상의 선택 인 것 같습니다. – LokiSinclair

+0

부분 문자열은 어떨까요? – FeliceM

답변

67

문자열은 JSON 형식이므로 개체를 구문 분석하여 개체로 변환해야합니다. 이를 위해 JSON.NET을 사용할 수 있습니다.

string source = "{\r\n \"id\": \"100000280905615\", \r\n \"name\": \"Jerard Jones\", \r\n \"first_name\": \"Jerard\", \r\n \"last_name\": \"Jones\", \r\n \"link\": \"https://www.facebook.com/Jerard.Jones\", \r\n \"username\": \"Jerard.Jones\", \r\n \"gender\": \"female\", \r\n \"locale\": \"en_US\"\r\n}"; 
dynamic data = JObject.Parse(source); 
Console.WriteLine(data.id); 
Console.WriteLine(data.first_name); 
Console.WriteLine(data.last_name); 
Console.WriteLine(data.gender); 
Console.WriteLine(data.locale); 

해피 코딩 :

다음은 동적 객체로 JSON 문자열을 구문 분석하는 방법에 대한 예입니다!

+6

감사합니다 .. 사용 : 동적 데이터 = JsonConvert.DeserializeObject (요소 [0]. 텍스트); –

+6

'JObject' 대신에'dynamic'을 위해서 +1 –

+1

이것은 모두 좋지만 동적 문자열이 생길 때까지 json으로부터 얻을 필요가 있습니다. 예 : 사용자. {ID}.사용자 이름 –

5

이 같은 클래스 만들기 : 다음

public class Data 
{ 
    public string Id {get; set;} 
    public string Name {get; set;} 
    public string First_Name {get; set;} 
    public string Last_Name {get; set;} 
    public string Username {get; set;} 
    public string Gender {get; set;} 
    public string Locale {get; set;} 
} 

(나는 100 % 확실하지 않다,하지만 작동하지 않는 경우 사용 [DataContract]DataContractJsonSerializer에 대한 [DataMember]가 필요합니다.)

JSonSerializer 만들 :

private static readonly XmlObjectSerializer Serializer = new DataContractJsonSerializer(typeof(Data)); 

및 역 직렬화 객체 :

// convert string to stream 
byte[] byteArray = Encoding.UTF8.GetBytes(contents); 
using(var stream = new MemoryStream(byteArray)) 
{ 
    (Data)Serializer.ReadObject(stream); 
} 
+4

Json.NET은 DataContractJsonSerializer보다 훨씬 뛰어납니다. 기능 비교표를보십시오 : http://json.codeplex.com/ –

+0

그리고 ServiceStack.Text는 JSON.Net보다 훨씬 낫습니다. – Sam

+0

나는 Json.NET을 좋아하지만 이것은 많은 외부 코드를 소개하지 않고 이해하기 쉬운 좋은 대답이다. – wcm

7

다음 코드는 저에게 효과적입니다.

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
       { 
        using (Stream responseStream = response.GetResponseStream()) 
        { 
         using (StreamReader responseReader = new StreamReader(responseStream)) 
         { 
          string json = responseReader.ReadToEnd(); 
          string data = JObject.Parse(json)["id"].ToString(); 
         } 
        } 
       } 

//json = {"kind": "ALL", "id": "1221455", "longUrl": "NewURL"} 
관련 문제