Woordenboek converteren naar JSON

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 strin een dictladen 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.loadsneemt een tekenreeks als invoer en retourneert een woordenboek als uitvoer.
  • json.dumpsneemt 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'>

Other episodes