我的想法很简单,我要寻找的是指针,批评,批评等。
我了解人们可以遍历某些数据类型,这对于任何编程语言都是非常重要的基础。但是,在需要嵌套循环(可能是为了进行比较)的情况下,或者在我的情况下,需要为嵌套循环创建更简单,更整洁的方式,以便在循环中添加下两个可迭代项。
我们知道Python可以期望一定数量的值,例如
for key in dictionary_data:
# do some stuff with it
pass
这里的Python希望将一个值从右变量解压缩到左变量中,直到我猜到它捕获了StopIteration或背景中的某物为止。
我们还知道Python for循环可以处理多个解包值,如下所示:
for key, index in enumerate(dictionary_data):
# do some more cool stuff
pass
但是让我们以JSON字符串(或对象)为例,该字符串对于所有意图和目的都是字典。如果我们有两个要比较的JSON字符串怎么办?而且,在您开始智能Alec的传输之前,if JSONString1 == JSONString2
是不合适的选择,因为我需要比较每个JSON字符串中的各个字段,以整理每个JSON字符串版本之间的差异。例如。在版本1和2中,有这些区别,添加了X,删除了Y。
我也了解字典,JSON字符串等都具有直接访问键值(.items()
)的内置功能,但这通常不适用于嵌套或双嵌套json字符串,您将需要将for循环嵌套到json字符串中nth
个嵌套中(如果JSON字符串中有5个嵌套级别,则需要5或6个for循环)。
在我看来,这似乎是相当落后和适得其反的,所以这是所有内容的长短之处。
是否已经存在可以检测到json字符串(或python字典)中嵌套多少层的东西?此外,一旦检测到,是否可以将键和值提取到Python对象中以供以后比较?
到目前为止,这就是我正在研究的内容,但这只是一个想法的概念设计,绝没有经过适当的测试就可以完成。
import json
js = '{"list":{"entry":[{"recordId":2,"deleted":0,"createdBy":"user.name","created":1542038309023,' \
'"id":"6e526a31-0e42-4fd9-8a0f-416e12354562", "fields":{"inuseby":"otheruser.name","returndate":1542240000000, ' \
'"sensor":"93b33535-6273-40a9-a7c3-45dd6a87d4b4","startdate":1541980800000,"class":"fields","version":1,' \
'"SATstatus":"error"},"ownedBy":"user.name"}]}}'
jsl = json.loads(js)
class JSONHookers(object):
def __init__(self):
self.js = js
self.jsl = json.loads(js)
if self.jsl:
for key, value in jsl.items():
self.__dict__[key] = value
for k, v in value.items():
self.__dict__[k] = v
for entries in v:
self.__dict__['entry'] = entries
print('Key: {}\nHas value/s of\n{}\n'.format('fields', fields))
if __name__ == '__main__':
jh = JSONHookers()