Ich versuche, eine JSON in eine flache Datei für eine Datenbank zu konvertieren. Um dies zu tun, muss ich einen Wert im Root-Knoten, dann einen Schlüssel in einem bestimmten Kinder, dann jeden Kind-Wert des Schlüssels.Wie bekomme ich Schlüssel und Schlüssel Kinder Wert mit JSON.net
Es stellt sich heraus ein Alptraum mit dem for each
und Guss Problem sein zwischen JObject
, JToken
und JProperty
Die Quelle JSON
{
"id": "030010014B",
"type": "street",
"housenumbers": {
"13": {
"lat": 46.085617,
"lon": 3.460492
},
"1bis": {
"lat": 46.08686,
"lon": 3.459992
},
"5": {
"lat": 46.086469,
"lon": 3.460912
}
}
}
Das erwartete Ergebnis
// <id value>;<key of housenumber #>;<lon value>;<lat value>
030010014B;13;3.460492;46.085617
030010014B;1bis;3.459992;46.08686
030010014B;5;3.460912;46.086469
Aktuelle Code, scheitert miserabel
Dim tmpJson As JObject = JObject.Parse(<json sample as string>)
Dim house As JToken
Dim house_p As JToken
If tmpJson.Property("housenumbers") IsNot Nothing Then
For Each houses As JObject In tmpJson.Property("housenumbers").Children 'only one
For Each house In houses.Descendants
fs.Append(tmpJson.Property("id").Value.ToString & ";")
Dim hh As JProperty = house 'failing here
fs.Append(hh.Name & ";") 'no way to get a key without jproperty
For Each house_p In house.Children()
fs.AppendLine(house_p.Value(Of String)("lon") & ";" & house_p.Value(Of String)("lat"))
Next
Next
Next
End If
...
Mein fehlerhaftes Beispiel ist von den C# Antworten um SO inspiriert, aber der "Wert für Schlüssel zu Werten" scheint eher selten.
Ich verstehe nicht wirklich, was passiert, aber es funktioniert! Was wäre die Art von "Zahlen", wenn ich sie vor der Verwendung deklarieren wollte? 'Zahlen als Dictionary (Of String, Location)' funktioniert nicht –
Sie können es als ein Wörterbuch anderswo deklarieren, aber Sie brauchen noch 'Of Dictionary (Of String, Location)' in der 'DeserializeObject' Methode - das sagt Json.NET was Form, um es zu deserialisieren. – Plutonix