2017-05-02 2 views
-1

Ich erhalte eine formatierte Zeichenfolge und ich kann die Quelle nicht ändern; Schaut es so etwas wie diese:C# Parse float von nicht-nur-numerische Zeichenfolge

{ 
"value": 4.12 
} 

Ich habe es in ein Doppel analysieren nur die Nummer zu zeigen. Ich bekomme ich es mit einem regex reinigen sollte double.TryParse() vor, aber ich habe keine Ahnung, wie die Regex zu formatieren ...

+1

, wenn die Quelle ein JSON-String ist, deserialisieren, um den Eigenschaftswert zu erhalten – hmnzr

+2

fehlt Ihnen nicht ein Doppelzitat um den 'Wert'? – Leonardo

+1

Wenn Sie regelmäßige Ausdrücke lernen möchten, würden die Ressourcen im Internet dafür buchstäblich zum Mond und zurück reichen. –

Antwort

2

wenn Sie nur doppelte Anführungszeichen um den value verpasst, das ist eine gültige JSON. Sie können es mit fast jeder json-Bibliothek analysieren.

+1

Sieht für mich nicht wie gültiges JSON aus, obwohl ich Sie nicht runtergeschmissen habe – KSib

+1

@KSib Ich denke, er hat die doppelten Anführungszeichen nur verpasst ... common typo ... – Leonardo

+1

Sieht so aus, als ob Sie Recht hatten. Ich habe dich auch aufgestuft, um dem Downvote entgegenzuwirken. Prost. – KSib

0

können Sie unter regex verwenden -

[0-9] + ([0-9] [0-9].?)?

0

Schnell und schmutzig regulären Ausdruck soluition:

string source = @"{ 
    ""value"": 4.12 
    }"; 

    double result = double.Parse(Regex.Match(source, @"-?[0-9]*\.?[0-9]+").Value, 
    CultureInfo.InvariantCulture); 

Eine bessere Umsetzung, jedoch ist es als JSON decerialize

2

Mit LINQ to JSON können Sie den Wert in einer Zeile abrufen:

var json = @"{ 
    ""value"" : 4.12 
}"; 
var value = (double)JObject.Parse(json)["value"]; 

Demo: https://dotnetfiddle.net/e0viPY

P.S.

Da Json.NET entspannte Syntax akzeptiert, würde dieser Code funktioniert auch mit der ursprünglichen Frage Ausgabe (dh nicht notiert Schlüssel):

var json = "{ value : 4.12 }"; 
var value = (double)JObject.Parse(json)["value"]; 

Demo: https://dotnetfiddle.net/iLERPb