我正在使用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"]}}'
我在这种类型的语法上找不到任何东西,并且意识到这可能是可以谷歌搜索的,所以很抱歉如果这个问题这么懒。
编辑:
a=jsondiff.diff(json1,json2,load=True)
答案 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__