当前位置: 首页 > 知识库问答 >
问题:

将字典转换为JSON

梁丘飞鸾
2023-03-14
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

共有3个答案

洪华皓
2023-03-14
  • json。加载以字符串作为输入并返回字典作为输出
  • json。转储将字典作为输入并返回字符串作为输出
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  |
nested_dictionary = {
    'one': nested_list,
    'two': dictionary,

}

json_dict = {'Nested Dictionary': nested_dictionary,
             'Multiple':[nested_dictionary, nested_dictionary, nested_dictionary]
            }

with open("test_nested.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=False)

图表响应

输出到嵌套的测试中。json

{
    "Nested Dictionary": {
        "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
                ]
            ]
        }
    },
    "Multiple": [
        {
            "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
                    ]
                ]
            }
        }
    ]
}
  • 一个简单的解决方案:
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)

# Because the JSON object is a Python dictionary. 
result = json.dumps(foo.__dict__, indent=4)
# See table above.

# or with built-in function that accesses .__dict__ for you, called vars()
# result = json.dumps(vars(foo), indent=4)

print(result) # same as before
  • 甚至更简单
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())

图表响应

输出:

{
    "web": "Stackoverflow",
    "type": "Knowledge",
    "is_the_best": true,
    "user": {
        "name": "Milovan",
        "age": 34
    }
}
边健
2023-03-14

json。dumps()返回python dict的JSON字符串表示形式。请参阅文档

因为r是一个字符串,不再是dict,所以不能执行r['rating']

也许你的意思是

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

json.dumps()将字典转换为str对象,而不是json(cript)对象!因此,您必须将str加载到cript中才能使用json.loads()方法使用它

请参见json。dumps()作为保存方法和json。作为检索方法加载()。

这是一个代码示例,可以帮助您更好地理解它:

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
 类似资料:
  • 问题内容: 我无法访问JSON中的数据。我究竟做错了什么? 问题答案: 将字典转换为对象,而不是对象!因此,您必须使用方法将其加载到 请参阅作为保存方法和检索方法。 这是代码示例,可以帮助您进一步了解它:

  • 问题内容: 我正在尝试将Python字典转换为Python列表,以便执行一些计算。 那是我的尝试…但是我无法解决问题所在? 问题答案: 你的问题是,你必须和引号使他们的字符串,即你设置包含字符串,而不是变量的值。另外,您不会清除列表,因此每次都添加到列表中,而不是仅包含两个项目。 要修复您的代码,请尝试以下操作: 你并不需要将循环变量拷贝和我放弃了出来到另一个变量在使用它们之前。同样,您无需使用a

  • 问题 你想使用一个Python字典存储数据,并将它转换成XML格式。 解决方案 尽管 xml.etree.ElementTree 库通常用来做解析工作,其实它也可以创建XML文档。 例如,考虑如下这个函数: from xml.etree.ElementTree import Element def dict_to_xml(tag, d): ''' Turn a simple dict of ke

  • 问题内容: 我有一个字典列表,看起来像这样: 等等。列表中可能还有更多文档。我需要将它们转换为一个JSON文档,可以通过bottle返回该文档,但我不知道该怎么做。请帮忙。我在该网站上看到了类似的问题,但是我无法理解那里的解决方案。 问题答案: 使用json库 顺便说一句,您可能会考虑将变量列表更改为另一个名称,这是用于创建列表的内置函数,如果不更改变量名称,则可能会出现一些意外行为或错误代码。

  • 问题内容: 目前,我有这本词典,使用印刷: 当我这样做时: 我收到此错误: 问题答案: 如果您可以在json中使用不可打印的符号,请添加到通话中。 如果是假的,那么返回值将是一个 实例受到正常的Python来 强制规则,而不是被转义为ASCII 。

  • 问题内容: 我有一个包含四列的。我想将此DataFrame转换为python字典。我希望第一列的元素为,同一行中其他列的元素为。 数据框: 输出应如下所示: 字典: 问题答案: 该方法将列名设置为字典键,因此你需要稍微调整DataFrame的形状。将“ ID”列设置为索引,然后转置是实现此目的的一种方法。 还接受一个“东方”参数,你需要该参数才能为每列输出值列表。否则,将为每一列返回形式的字典。