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

2024-04-23 23:22:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个jsondiff库,它返回以下结果:

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

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

这是完整的库文件:https://github.com/ZoomerAnalytics/jsondiff/blob/master/jsondiff/init.py

图书馆的相关部分(至少从我收集到的资料来看):

^{pr2}$

当我用垃圾场的时候(json.dump文件output)选项此库的结果是:

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

我在这类语法上找不到任何东西,我意识到这可能是谷歌搜索的结果,所以如果这个问题给人的印象是懒惰的,那么很抱歉。在

编辑:

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

Tags: 文件httpsgithubmastercomjsonappdelete
2条回答

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

from .symbols import *

请注意,不建议使用splat符号导入整个模块,因为这样做会使代码更难阅读。在

.symbols内,delete在第14行定义:

^{pr2}$

并且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,它将如下所示:

^{4}$

但是,如果要使用一个简单的类,那么它将如下所示:

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

这是一个有效的Python dict.delete只是在这里定义的一个对象: https://github.com/ZoomerAnalytics/jsondiff/blob/master/jsondiff/symbols.py#L14

相关问题 更多 >