将字典转换为JSON

时间:2014-11-04 21:38:48

标签: python json python-2.7 dictionary

r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
file.write(str(r['rating']))

我无法访问JSON中的数据。我做错了什么?

TypeError: string indices must be integers, not str

5 个答案:

答案 0 :(得分:369)

json.dumps()将字典转换为str对象,而不是json(dict)对象!因此,您必须使用json.loads()方法

将str加载到dict中以使用它

请参阅json.dumps()作为保存方法,json.loads()作为检索方法。

这是可能有助于您更多了解它的代码示例:

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

答案 1 :(得分:31)

json.dumps()返回python dict的JSON字符串表示形式。 See the docs

你不能r['rating']因为r是一个字符串,而不是dict

也许你的意思是

r = {'is_claimed': 'True', 'rating': 3.5}
json = json.dumps(r) # note i gave it a different name
file.write(str(r['rating']))

答案 2 :(得分:8)

json.dumps() 用于解码 JSON 数据

  • json.loads 以字符串作为输入并返回字典作为输出。
  • json.dumps 以字典作为输入并返回一个字符串作为输出。
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

输出:

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 对象到 JSON 数据的转换
|                 Python                 |  JSON  |
|:--------------------------------------:|:------:|
|                  dict                  | object |
|               list, tuple              |  array |
|                   str                  | string |
| int, float, int- & float-derived Enums | number |
|                  True                  |  true  |
|                  False                 |  false |
|                  None                  |  null  |

答案 3 :(得分:2)

无需使用json.dumps()

将其转换为字符串
r = {'is_claimed': 'True', 'rating': 3.5}
file.write(r['is_claimed'])
file.write(str(r['rating']))

您可以直接从dict对象获取值。

答案 4 :(得分:0)

将r定义为字典应该可以解决问题:

>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>