2013-07-12 11 views
32

Ho una stringa e voglio ottenere alcuni valori da essa.Come ottenere alcuni valori da una stringa JSON in C#?

mie corde sembrano come:

string1:

"{\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}" 

stringa2:

"{\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}" 

Purtroppo, non v'è una situazione che una stringa sarà dallo stesso concetto, ma senza alcuna parametri:

string3:

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

Come posso ottenere i valori di: id, first_name, last_name, gender, locale?

Qualsiasi aiuto apprezzato!

+13

Sembra che sia necessario un [parser JSON] (https://www.google.co.uk/search?q=c%23+parse+json). – Rawling

+0

Io userei le librerie Regex o JSON per quello. Sembra la migliore scommessa. – LokiSinclair

+0

Che dire della sottostringa. – FeliceM

risposta

67

Le stringhe sono formattate in JSON, quindi è necessario analizzarlo in un oggetto. Per questo è possibile utilizzare JSON.NET.

Ecco un esempio su come analizzare una stringa JSON in un oggetto dinamico:

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); 

Felice codifica!

+6

grazie .. Ho usato: dati dinamici = JsonConvert.DeserializeObject (elementi [0] .Text); –

+6

+1 per 'dynamic' invece di' JObject' –

+1

Questo è tutto buono ma finché non si dispone di una stringa dinamica è necessario ottenere da json. ad es. utenti. {ID}.Nome utente –

5

Creare una classe come questa:

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;} 
} 

(. Io non sono sicuro al 100%, ma se questo non funziona Avrete bisogno di uso [DataContract] e [DataMember] per DataContractJsonSerializer)

Poi creare JSonSerializer:

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

e deserializzare oggetto:

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

Json.NET è molto meglio di DataContractJsonSerializer. Vedi la tabella di comparazione delle caratteristiche: http://json.codeplex.com/ –

+0

E ServiceStack.Text è molto meglio di JSON.Net. – Sam

+0

Mi piace Json.NET ma questa è una buona risposta che non introduce molto codice esterno ed è facile da capire. – wcm

7

Il seguente codice funziona per me.

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"} 
Problemi correlati