2016-06-23 1 views
3

Ich habe einen Schlüssel mit zufälligen Bits der Zeichenfolge darin macht es schwierig, den Wert zu extrahieren. Wie würde ich es machen, wenn ich die zufälligen Bits nicht im Voraus kenne?C#: Holen Sie den Wert eines Schlüssels in einem Objekt mit Regex

gegeben:

sample = {\"total_ra4jhga987y3h_power\": 30} 

Ist es möglich, stattdessen etwas direkt wie

dynamic obj = JsonConvert.DeserializeObject(sample); 
obj[@"^total_(.*)_power$"] ---> should give me 30 

Antwort

3

Verwenden LINQ to JSON zu tun. Wenn Sie es als JObject analysieren, können Sie über alle Eigenschaften iterieren und diejenigen finden, die zu Ihrer Regex passen.

Regex regex = new Regex(...); 
JObject json = JObject.Parse(text); 
foreach (var property in json.Properties()) 
{ 
    if (regex.IsMatch(property.Name)) 
    { 
     ... 
    } 
} 
+0

Ich musste Properties(); statt GetProperties und es funktionierte mit Newtonsoft.Json – user299709

+1

@ user299709: Whoops, ja, falsch gelesen die Dokumente. Fest. –

0

Sie LINQ nutzen können durch Ihre Eigenschaften zu gehen und ihre Namen für Ihr regexp testen:

JObject sample = JsonConvert.DeserializeObject("{\"total_ra4jhga987y3h_power\": 30, \"not_matching\": 31}") as JObject; 

var result = sample.PropertiesByRegexp(new Regex("^total_(.*)_power$")); 

foreach (var propertyPair in result) 
{ 
    Console.WriteLine($"{propertyPair.Key}: {propertyPair.Value}"); 
} 

:

public static class JsonExtensions 
{ 
    public static Dictionary<string, JToken> PropertiesByRegexp(this JObject token, Regex regex) 
    { 
     return token.Properties() 
      .Where(p => regex.IsMatch(p.Name)) 
      .ToDictionary(p => p.Name, p => p.Value); 
    } 
} 

Sie nun diese Erweiterungen Methode in der folgenden Art und Weise verwenden können Ausgänge:

total_ra4jhga987y3h_power: 30

2
var jsonDict = JsonConvert.DeserializeObject<Dictionary<string,long>>(sample); 
Regex rg = new Regex("total_.*_power"); 
var key = jsonDict.Keys.First(k=>rg.IsMatch(k)); 
Console.log(jsonDict[key]); 
Verwandte Themen