【问题标题】:dumping vs loading data into JSON将数据转储和加载到 JSON
【发布时间】:2021-03-04 20:22:45
【问题描述】:

我观察到以下行为:

railnet= '''{
    "nodes": [
        {"data": { "id": 1,"name":"BER" }},
        {"data": { "id": 2,"name": "MUN"}},
        {"data": { "id": 3,"name": "FRA"}}
        ],
    "edges": [
        {"data": { "id": "BER - MUN", "source": "BER", "target": "MUN" }},
        {"data": { "id": "MUN - FRA", "source": "MUN", "target": "FRA" }},
        {"data": { "id": "FRA - BER", "source": "FRA", "target": "BER" }}
    ]
  }'''
railnetJSON = json.loads(railnet)
print(railnetJSON['nodes'])

railnet 是一个字符串。到目前为止一切正常。

但是如果 railnet 是一个字典呢?:

    railnet= {
    "nodes": [
        {"data": { "id": 1,"name":"BER" }},
        {"data": { "id": 2,"name": "MUN"}},
        {"data": { "id": 3,"name": "FRA"}}
        ],
    "edges": [
        {"data": { "id": "BER - MUN", "source": "BER", "target": "MUN" }},
        {"data": { "id": "MUN - FRA", "source": "MUN", "target": "FRA" }},
        {"data": { "id": "FRA - BER", "source": "FRA", "target": "BER" }}
    ]
  }
print(type(railnet)) # ->dict
railnetJSON = json.dumps(railnet) # -> no error here
print(railnetJSON['nodes']) # -> error here

线

railnetJSON = json.dumps(railnet)

作品 但最后一行给出:

TypeError: string indices must be integers

问题是为什么我可以将字典转储到带有转储的 JSON(没有错误)但访问节点会引发错误。具有相同行为的正确方法是将变量作为字符串或字典传递给 JSON。

换句话说,如果您需要创建一个 JSON 对象以传递给另一个接受 JSON 的函数,那么当您有字典时该怎么做?

谢谢

在阅读 hereherehere 之后,似乎要走的路确实是转储 dicts。

【问题讨论】:

  • dumps() 将字典转换为 JSON 字符串

标签: python json string dictionary


【解决方案1】:

json.dumps 获取一个对象(在本例中为字典)并将其转储为 JSON 格式的字符串。从那里开始,它只是一个字符串。如果你想引用其中的键,你需要json.loads 它返回一个字典。

【讨论】:

    【解决方案2】:

    json.dumps() 将 JSON 转换为字符串,因此您无法使用密钥访问

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 2011-04-18
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多