Ik heb geen toegang tot mijn gegevens in de JSON. Wat doe ik verkeerd?
TypeError: string indices must be integers, not str
Antwoord 1, autoriteit 100%
json.dumps()
converteert een woordenboek naar een str
-object, niet een json(dict)
-object! Dus je moet je str
in een dict
laden om het te gebruiken met behulp van json.loads()
methode
Bekijk json.dumps()
als opslagmethode en json.loads()
als ophaalmethode.
Dit is het codevoorbeeld dat je kan helpen het beter te begrijpen:
import json
r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
loaded_r = json.loads(r)
loaded_r['rating'] #Output 3.5
type(r) #Output str
type(loaded_r) #Output dict
Antwoord 2, autoriteit 8%
json.dumps()
retourneert de JSON-tekenreeksrepresentatie van het python-dict. Bekijk de documenten
Je kunt r['rating']
niet doen omdat r een string is, geen dictaat meer
Misschien bedoelde je zoiets als
r = {'is_claimed': 'True', 'rating': 3.5}
json = json.dumps(r) # note i gave it a different name
file.write(str(r['rating']))
Antwoord 3
json.dumps()
wordt gebruikt om JSON-gegevens te decoderen
json.loads
neemt een tekenreeks als invoer en retourneert een woordenboek als uitvoer.json.dumps
neemt een woordenboek als invoer en retourneert een tekenreeks als uitvoer.
import json
# initialize different data
str_data = 'normal string'
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,
'nested list': nested_list
}
# convert them to JSON data and then print it
print('String :', json.dumps(str_data))
print('Integer :', json.dumps(int_data))
print('Float :', json.dumps(float_data))
print('List :', json.dumps(list_data))
print('Nested List :', json.dumps(nested_list, indent=4))
print('Dictionary :', json.dumps(dictionary, indent=4)) # the json data will be indented
uitvoer:
String : "normal string"
Integer : 1
Float : 1.5
List : ["normal string", 1, 1.5]
Nested List : [
1,
1.5,
[
"normal string",
1,
1.5
]
]
Dictionary : {
"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-object naar JSON-gegevensconversie
| Python | JSON |
|:--------------------------------------:|:------:|
| dict | object |
| list, tuple | array |
| str | string |
| int, float, int- & float-derived Enums | number |
| True | true |
| False | false |
| None | null |
Antwoord 4
Het is niet nodig om het in een string te converteren met json.dumps()
r = {'is_claimed': 'True', 'rating': 3.5}
file.write(r['is_claimed'])
file.write(str(r['rating']))
Je kunt de waarden rechtstreeks uit het dict-object halen.
Antwoord 5
Het definiëren van r als een woordenboek zou voldoende moeten zijn:
>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>