python - 如何序列化/反序列化这个实体?

标签 python json python-2.7

下面的代码定义了一个用于转换字段值的字典。读取数据,根据该字典转换一些值,然后将其写入表中。它按原样工作。问题是,我现在想将此配置移到 .py 文件之外到 JSON 配置文件中。

 lookups = {
     11: {
         "ST1": ["ABC"],
         "UNK01": ["125", "ACD"],
         "A": ["52"],
         "B": ["91"],
         "C": ["92"],
         "D": ["95"]
        },
     10: {
         "XYZ01": ["91"],
         "XYZ02": ["83"],
         "XYZ03": ["27"]
        }
 }

根据 jsonlint.com,为了使分配给 lookups 的上述值成为有效的 JSON,我必须引用 1110键。这样做会破坏我的 Python 代码并显示 TypeError: listIndexsmust beintegers, not str.

如何创建有效的 JSON 并最大限度地减少对代码的更改?

最佳答案

如果你想将其转储到 json 文件:

import json 

with open("config.json","w") as f:
    json.dump(lookups, f) # dump dict to file

with open("config.json") as f:
    s = json.load(f) # load dict from file
print(s)
{'11': {'ST1': ['ABC'], 'A': ['52'], 'D': ['95'], 'UNK01': ['125', 'ACD'], 'B': ['91'], 'C': ['92']}, '10': {'XYZ01': ['91'], 'XYZ03': ['27'], 'XYZ02': ['83']}}

如果您需要将键作为整数,您可以循环并强制转换为整数或使用pickle:

import pickle
with open("in.pkl","wb") as f:
    pickle.dump(lookups, f)

with open("in.pkl","rb") as f:
    s = pickle.load(f)
print(s)
{10: {'XYZ03': ['27'], 'XYZ01': ['91'], 'XYZ02': ['83']}, 11: {'UNK01': ['125', 'ACD'], 'B': ['91'], 'D': ['95'], 'ST1': ['ABC'], 'C': ['92'], 'A': ['52']}}

如果不按原样使用。

关于python - 如何序列化/反序列化这个实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374656/

相关文章:

python - 如何在 pandas 数据框中指定列类型

ios - 快速迭代 JSON

java - 如何在不手动转换为 JSON 的情况下使用 Jersey Client 发布 Pojo?

php - 无法使用 php 和 angular2 一次插入多条记录

linux - 我以前从未设置过 cron 作业,但希望每天在我的服务器上运行一个 Python 脚本 15 分钟

带参数的 Python 描述符?

python 操作系统系统问题 : "sh: 1: [command] not found"; command works interactively

python - PANDAS 中的滚动产品超过 30 天的时间窗口

python - 类型错误 : unsupported operand type(s) for ^: 'numpy.float64' and 'numpy.float64'

python - 在PCA之前对标准化感到困惑