当前位置: 代码迷 >> python >> 有关python的JSON / dict转换的问题
  详细解决方案

有关python的JSON / dict转换的问题

热度:104   发布时间:2023-07-16 09:41:15.0

我正在使用jsondiff库,该库返回以下结果:

a = {'TIERS': {delete: ['APP']}}

我不知道这是如何有效地表达dict(或JSON)的? 这不应该失败,因为delete不在引号中吗? 但是,这似乎是有效的字典。

这是完整的库文件: :

图书馆的相关部分(至少可以收集到):

    def emit_dict_diff(self, a, b, s, added, changed, removed):
        if s == 0.0:
            return b
        elif s == 1.0:
            return {}
        else:
            d = {}
            if added:
                d[insert] = added
            if changed:
                d[update] = changed
            if removed:
                d[delete] = list(removed.keys())

当我为此库使用转储(json.dump输出)选项时,结果是:

a = '{"TIERS": {"$delete": ["APP"]}}'

我在这种类型的语法上找不到任何东西,并且意识到这可能是可以谷歌搜索的,如果这个问题很懒惰,对不起。

编辑:

  • python 3.6+
  • jsondiff库用作a=jsondiff.diff(json1,json2,load=True)

这是有效的Python字典。 delete只是在此处定义的对象: :

jsondiff.__init__.py文件的第6行:

from .symbols import *

请注意,不建议使用splat符号导入整个模块,因为除其他原因外,它使代码更难阅读。

.symbols ,在第14行定义了delete

delete = Symbol('delete')

Symbol类本身在同一模块的第2行中定义。

class Symbol(object):
    def __init__(self, label):
        self.label = label

    def __repr__(self):
        return self.label

    def __str__(self):
        return "$" + self.label

如果要创建一个包含变量的字典,例如b ,它将看起来像这样:

b = 'two'
d = {'one': 1, b: 2}
>>> d
{'one': 1, 'two': 2}

但是,如果您使用一个简单的类,它将看起来像这样:

class Sym(object):
    def __init__(self, label):
        self.label = label

b = Sym('test')
d = {'one': 1, b: 2}
>>> d
{<__main__.Sym at 0x1a194be240>: 2, 'one': 1}

添加__repr__ dunder方法将使此方法更具可读性:

class Sym(object):
    def __init__(self, label):
        self.label = label

    def __repr__(self):
        return self.label

b = Sym('test')
d = {'one': 1, b: 2}
>>> d
{'one': 1, test: 2}

最后的__str__方法在转换为字符串时(例如,在打印时)会在标签前加上美元符号。

class Sym(object):
    def __init__(self, label):
        self.label = label

    def __repr__(self):
        return self.label

    def __str__(self):
        return "$" + self.label

b = Sym('test')
d = {'one': 1, b: 2}
>>> d
{test: 2, 'one': 1}

for key in d.keys():
    print(key)
# Output:
# $test
# one
  相关解决方案