2016-11-16 5 views
2

geben ein jsonerhalten Schlüssel und Werte als String

{ "id": 1, "name": "one" } 

Ich möchte zwei Saiten produzieren:

  • eines mit Tasten wie:

    "id", "name"

  • und eins mit Werten

    1, "one"

scheint trivial, aber so weit ich weiß nicht einmal, wo ich anfangen soll. Sollte ich es mit einem JSON Parser zu einem JSONValue parsen und dann die Schlüssel holen? Ist es greifbar, die dynamische Natur des JSON zu geben, die gegeben werden kann? Oder nehmen Sie einfach eine REGEX-Route? Irgendwelche anderen Ideen?

+1

Der JSON-Typ-Provider ist ziemlich gut, wenn Ihr Dokument eine Standardstruktur hat –

+1

Ein JSON-Parser wird immer vor Regex empfohlen, weil es flexibler als Regex ist. – AlphaQ

+0

Das Problem ist, dass ich nicht sicher bin, wie ich diese beiden Strings bekommen würde, sobald sie geparst sind. –

Antwort

4

Wenn Sie JSON auf .NET analysieren möchten, gibt es wirklich eine Lösung in der Stadt - Newtonsoft JSON.NET.

Ich nehme an, dass Sie JSON-Dokumente analysieren möchten, in denen Sie das Schema nicht vorher kennen. JSON.NET verfügt über ein Objektmodell, mit dem ein Dokument im Speicher dargestellt werden kann. Sie können dies überprüfen, um die gewünschte Ausgabe zu erstellen.

Hier ist ein Beispiel, das Sie gehen bekommen sollte:

open Newtonsoft.Json 
open Newtonsoft.Json.Linq 

let json = "{ \"id\": 1, \"name\": \"one\" }" 

let rep = JObject.Parse(json) 

let names, values = 
    [ for p in rep.Properties() do 
     yield p.Name, p.Value.ToObject<string>() ] 
    |> List.unzip 

Offensichtlich ist die Probe nur flache Dokumente behandelt, aber es sollte ziemlich einfach sein, es rekursiv zu machen.

Wenn Sie das Schema kennen, können Sie einen Typ-Provider verwenden oder JSON.NET zum Deserialisieren eines JSON-Dokuments straight into a record type verwenden.

+0

genial, genau das, was ich gesucht habe. Vielen Dank @scrwtp –

Verwandte Themen