Ich habe eine JSON-Datei, die beim Laden in Python mit json.loads()
wird zu einem dictionary
. Die JSON-Daten sind eine nested dictionary
, die einen 'groups'
Schlüssel innerhalb eines anderen 'groups'
Schlüssels enthalten kann. Die Werte innerhalb des Schlüssels 'groups'
sind ein Schlüssel 'name'
und ein Schlüssel 'properties'
.Aktualisieren Sie einen Wörterbuch Wert mit Python
Jeder Schlüssel 'properties'
hat einen eindeutigen Schlüssel 'name'
und 'value'
.
Mein Ziel ist es für einen 'groups'
Schlüssel, dessen 'name'
Schlüsselwert als "SportCar"
, welches einen properties
Schlüssel mit einem name
Schlüsselwert als "BMW"
, und nur zu suchen, wenn diese Bedingungen erfüllt sind, aktualisieren Sie die 'data'
Schlüssel 'data':value1
-'data':value2
.
Ein Beispiel des json ist als
{
"groups": [
{
"name": "SportCar",
"properties": [
{
"name": "BMW",
"value": {
"type": "String",
"encoding": "utf-8",
"data": "value1"
}
},
{
"name": "Audi",
"value": {
"type": "Boolean",
"data": true
}
}
],
"groups": [
{
"name": "Trucks",
"properties": [
{
"name": "Volvo",
"value": {
"type": "String",
"encoding": "utf-8",
"data": "value1"
}
}
]
}
]
},
{
"name": "MotorCycle",
"properties": [
{
"name": "Yamaha",
"value": {
"type": "String",
"encoding": "utf-8",
"data": "value1"
}
}
],
"groups": [
{
"name": "Speeders",
"properties": [
{
"name": "prop2",
"value": {
"type": "String",
"encoding": "utf-8",
"data": "value1"
}
}
]
}
]
}
]
}
Die obige json in myjson22.json enthalten ist, folgt. Hier ist, was ich versucht habe, so weit:
import json
from pprint import pprint
json_data=open('myjson22.json', 'r')
data = json.load(json_data)
#print(data)
def get_recursively(search_dict, field):
"""
To read the json data as type dict and search all 'groups' keys for the 'name' key value value provided.
"""
fields_found = []
for key, value in search_dict.items():
if key == field:
fields_found.append(value)
elif isinstance(value, dict):
results = get_recursively(value, field)
for result in results:
fields_found.append(result)
elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
more_results = get_recursively(item, field)
for another_result in more_results:
fields_found.append(another_result)
return fields_found
get_recursively(data, ["properties"][0])
und der Ausgang war:
[[{'name': 'BMW',
'value': {'data': 'value1', 'encoding': 'utf-8', 'type': 'String'}},
{'name': 'Audi', 'value': {'data': True, 'type': 'Boolean'}}],
[{'name': 'Volvo',
'value': {'data': 'value1', 'encoding': 'utf-8', 'type': 'String'}}],
[{'name': 'Yamaha',
'value': {'data': 'value1', 'encoding': 'utf-8', 'type': 'String'}}],
[{'name': 'prop2',
'value': {'data': 'value1', 'encoding': 'utf-8', 'type': 'String'}}]]
Was haben Sie bisher versucht und warum es scheitern um die gewünschten Ergebnisse zu erzielen? –
'Eine Eigenschaft', aber Eigenschaften ist ein Array? – njzk2
Bitte teilen Sie den Code und den Fehler, falls vorhanden. –