r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
file.write(str(r['rating']))
Ich kann nicht auf meine Daten im JSON zugreifen. Was mache ich falsch?
TypeError: Stringindizes müssen Ganzzahlen sein, keine Zeichenfolgen
r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
file.write(str(r['rating']))
Ich kann nicht auf meine Daten im JSON zugreifen. Was mache ich falsch?
TypeError: Stringindizes müssen Ganzzahlen sein, keine Zeichenfolgen
json.dumps()
konvertiert ein Wörterbuch in ein str
-Objekt, nicht in ein json(dict)
-Objekt! Daher musst du dein str
in ein dict
laden, um es mit der Methode json.loads()
zu verwenden
Betrachte json.dumps()
als eine Speichermethode und json.loads()
als eine Abrufmethode.
Hier ist der Codeschnipsel, der dir helfen könnte, es besser zu verstehen:
import json
r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
loaded_r = json.loads(r)
loaded_r['rating'] #Ausgabe 3.5
type(r) #Ausgabe str
type(loaded_r) #Ausgabe dict
json.dumps()
gibt die JSON-Zeichenfolgenrepräsentation des Python-Dikts zurück. Siehe die Dokumentation
Du kannst nicht r['rating']
machen, weil r jetzt ein String ist und kein Dikt mehr
Vielleicht meintest du etwas wie
r = {'is_claimed': 'True', 'rating': 3.5}
json = json.dumps(r) # beachte, dass ich ihm einen anderen Namen gegeben habe
file.write(str(r['rating']))
json.dumps()
wird verwendet, um JSON-Daten zu decodierenjson.loads
nimmt eine Zeichenfolge als Eingabe und gibt ein Wörterbuch als Ausgabe zurück.json.dumps
nimmt ein Wörterbuch als Eingabe und gibt eine Zeichenfolge als Ausgabe zurück.
import json
str_data = 'normale Zeichenfolge' int_data = 1 float_data = 1,50 list_data = [str_data, int_data, float_data] nested_list = [int_data, float_data, list_data] dictionary = { 'int': int_data, 'str': str_data, 'float': float_data, 'list': list_data, 'verschachtelte liste': nested_list }
print('Zeichenfolge :', json.dumps(str_data)) print('Integer :', json.dumps(int_data)) print('Gleitkommazahl :', json.dumps(float_data)) print('Liste :', json.dumps(list_data)) print('Verschachtelte Liste :', json.dumps(nested_list, indent=4)) print('Wörterbuch :', json.dumps(dictionary, indent=4)) # die JSON-Daten werden eingerückt
Ausgabe:
Zeichenfolge : "normal string"
Integer : 1
Gleitkommazahl : 1.5
Liste : ["normal string", 1, 1.5]
Verschachtelte Liste : [
1,
1.5,
[
"normal string",
1,
1.5
]
]
Wörterbuch : {
"int": 1,
"str": "normal string",
"float": 1.5,
"list": [
"normal string",
1,
1.5
],
"nested list": [
1,
1.5,
[
"normal string",
1,
1.5
]
]
}
Python-Objekt in JSON-Datenkonvertierung
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True | true |
False | false |
None | null |
verschachteltes_wörterbuch = {
'one': nested_list,
'two': dictionary,
}
json_wörterbuch = {'Verschachteltes Wörterbuch': verschachteltes_wörterbuch,
'Mehrere':[verschachteltes_wörterbuch, verschachteltes_wörterbuch, verschachteltes_wörterbuch]
}
with open("test_nested.json", "w") as outfile:
json.dump(json_wörterbuch, outfile, indent=4, sort_keys=False)
Diagrammantwort
Ausgabe in test_nested.json
{
"Verschachteltes Wörterbuch": {
"one": [
1,
1.5,
[
"normal string",
1,
1.5
]
],
"two": {
"int": 1,
"str": "normal string",
"float": 1.5,
"list": [
"normal string",
1,
1.5
],
"nested list": [
1,
1.5,
[
"normal string",
1,
1.5
]
]
}
},
"Mehrere": [
{
"one": [
1,
1.5,
[
"normal string",
1,
1.5
]
],
"two": {
"int": 1,
"str": "normal string",
"float": 1.5,
"list": [
"normal string",
1,
1.5
],
"nested list": [
1,
1.5,
[
"normal string",
1,
1.5
]
]
}
},
{
"one": [
1,
1.5,
[
"normal string",
1,
1.5
]
],
"two": {
"int": 1,
"str": "normal string",
"float": 1.5,
"list": [
"normal string",
1,
1.5
],
"nested list": [
1,
1.5,
[
"normal string",
1,
1.5
]
]
}
},
{
"one": [
1,
1.5,
[
"normal string",
1,
1.5
]
],
"two": {
"int": 1,
"str": "normal string",
"float": 1.5,
"list": [
"normal string",
1,
1.5
],
"nested list": [
1,
1.5,
[
"normal string",
1,
1.5
]
]
}
}
]
}
Klasse
-Instanz in JSONEine einfache Lösung:
class Foo(object): def init( self, data_str, data_int, data_float, data_list, data_n_list, data_dict, data_n_dict): self.str_data = data_str self.int_data = data_int self.float_data = data_float self.list_data = data_list self.nested_list = data_n_list self.dictionary = data_dict self.nested_dictionary = data_n_dict
foo = Foo( str_data, int_data, float_data, list_data, nested_list, dictionary, nested_dictionary)
result = json.dumps(foo.dict, indent=4)
print(result) # wie zuvor
Noch einfacher
class Bar: def toJSON(self): return json.dumps(self, default=lambda o: o.dict, sort_keys=False, indent=4)
bar = Bar() bar.web = "Stackoverflow" bar.type = "Knowledge" bar.is_the_best = True bar.user = Bar() bar.user.name = "Milovan" bar.user.age = 34
print(bar.toJSON())
Diagrammantwort
Ausgabe:
{
"web": "Stackoverflow",
"type": "Knowledge",
"is_the_best": true,
"user": {
"name": "Milovan",
"age": 34
}
}
Sie können im obigen Beispiel ein verschachteltes Wörterbuch erstellen, indem Sie ein neues Wörterbuch innerhalb des Standardwörterbuchs deklarieren.
import json
dictionary = {
'fruit':{"Trauben": "10","Farbe": "grün"},
'Gemüse':{"Chili": "4","Farbe": "rot"},
}
result = json.dumps(dictionary, indent = 3)
print(result)
Hier habe ich indent=3 verwendet
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.