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

时间:2018-10-04 07:42:57

标签: python json dictionary

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

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

我对这是dict(或JSON)的有效表示不知所措?是否应该因为delete不在引号中而失败?但是,这似乎是有效的字典。

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

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

    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)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

$data2 = array(); foreach($datas as $d){ $data2[] = substr($d, 2); } $data2 = implode('<br/>', $data2); 文件的第6行:

jsondiff.__init__.py

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

from .symbols import * 中,.symbols在第14行中定义:

delete

delete = Symbol('delete') 类本身是在同一模块的第2行中定义的。

Symbol

如果要创建带有变量的字典,例如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} dunder方法将使其更具可读性:

__repr__

最后一种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__