【问题标题】:Python JSON Formatting for Redis CacheRedis 缓存的 Python JSON 格式
【发布时间】:2020-09-16 10:43:02
【问题描述】:

我对使用 JSON 比较陌生,我正在尝试使用 python 中的 json 库将字典输出到 JSON。我遇到的问题是格式非常具体,我不知道如何处理。具体来说,所需的格式有额外的大括号和方括号。下面是我正在转换为 JSON 的字典和所需输出的示例:

    #Sample Data
sample_dict = {"office":{"50":"pencil;paper",
                      "100":"stapler;eraser"},
             "warehouse":{"50":"forklift;wrench",
                         "100":"truck,screw"}}

with open('test.json', 'w') as f:
    json.dump(sample_dict, f,indent = 4)

##Output I'm able to acheive
{
    "office": {
        "50": "pencil;paper",
        "100": "stapler;eraser"
    },
    "warehouse": {
        "50": "forklift;wrench",
        "100": "truck,screw"
    }
}


##Desired Output
[{
    {"office": {
        "50": "pencil;paper",
        "100": "stapler;eraser"
    }},
    {"warehouse": {
        "50": "forklift;wrench",
        "100": "truck,screw"
    }}
}]

【问题讨论】:

  • 您需要发布您需要的确切规格,而不仅仅是一个样本。它包含在[...] 中。这仅适用于顶级吗?为什么“办公室”和“仓库”用括号括起来而不是数量?
  • 您能帮我们仔细检查一下您想要的输出吗?现在,它是一个列表,其中包含一个没有键/值对的字典,但它包含两个子字典,每个子字典都有一个包含两个键/值对的字典。根据 Steven M 的回答,您是否打算列出 1 个包含 2 个键(办公室、仓库)的字典,其中的值是嵌套字典?
  • 所需的输出是正确的......我确实得到了更多关于输出的背景......它应该存储在 Redis 缓存中。也许这可以解释额外的 {}?

标签: python json dictionary redis


【解决方案1】:

我认为您需要将“sample_dict”设为带方括号的字符串。

import json

sample_dict = '[{"office":{"50":"pencil;paper", "100":"stapler;eraser"}, "warehouse":{"50":"forklift;wrench", "100":"truck,screw"}}]'

load=json.loads(sample_dict)
print(json.dumps(load, indent=4))

【讨论】:

    【解决方案2】:

    额外的[] 很容易——整个字典都在一个列表中。但是,额外的{} 不是;实际上,您发布的示例不是有效的 JSON。

    此时,您需要明确输出应该是 JSON 还是应该与给定的样本匹配。

    • 如果输出应该是 JSON,您需要获得正确的示例输出,然后从那里开始工作。顶层至少是一个字典列表。

    • 如果输出应该与给定的示例匹配,则它不是 JSON,您将不会使用 json 库。根据情况,您可以:

      • 使用 Python 字符串格式化(%.format()f"..." 字符串)进行格式化;或
      • 使用 JinjaMako 或类似的模板库;或
      • 如果数据结构广泛且格式一致,请编写自己的库以输出该格式。

    【讨论】:

    • 感谢您的洞察!如果 JSON 用于 Redis 缓存,会有什么不同吗?
    • 嗯,在 Redis 中您将存储字符串,所以问题是从 Redis 中读取它的内容是什么。如果它将成为您自己的程序,最好使用标准 JSON(没有额外的{})。如果是其他程序,您需要检查它所期望的确切格式。
    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 2020-09-29
    • 2017-06-08
    • 1970-01-01
    • 2018-01-30
    • 2018-11-23
    • 2018-02-14
    相关资源
    最近更新 更多