如何在 json 数组中存储多个项目而不重复?
How can I store multiple items in an json array without duplicates?
我正在尝试在 python 中开发某种点对点系统。当客户端连接到我的服务器时,客户端将所有文件发送到特定位置。当客户端向服务器发送数据时,它通过 json 执行此操作。当服务器从客户端获取信息时,它会打印它。一个例子:
{
"Localfiles": [{
"IPAddress": ["217.120.103.158"],
"FileLength": 363031,
"FileName": "chromeicon.png"
}, {
"IPAddress": ["217.120.103.158"],
"FileLength": 363031,
"FileName": "chromeicon.png"
}]
}
这是客户端两次发送有关某个位置的信息(一个只有 1 个文件的文件夹)时打印的内容。我怎样才能做到,当我将数据附加到我的 json 数组时,它不会显示为重复项。
这是我的代码:
from twisted.internet import reactor, protocol
import os, json
data = {}
data['Localfiles'] = []
def test(datas):
test = json.loads(datas)
for x in range(0,(len(test['Localfiles']))):
if x not in data:
data['Localfiles'].append({
'FileName':test['Localfiles'][x]['FileName'],
'FileLength':test['Localfiles'][x]['FileLength'],
'IPAddress':test['Localfiles'][x]['IPAddress']
})
print json.dumps(data) +"\n"
return data
class Echo(protocol.Protocol):
def dataReceived(self, data):
try:
self.transport.write(json.dumps(test(data)))
except ValueError:
print "nope"
def main():
factory = protocol.ServerFactory()
factory.protocol = Echo
reactor.listenTCP(5000,factory)
reactor.run()
if __name__ == '__main__':
main()
迭代完值后如何折叠字典:
import json
dic = '{"Localfiles":[{"IPAddress": ["217.120.103.158"],"FileLength": 363031,"FileName": "chromeicon.png"},{"IPAddress": ["217.120.103.158"],"FileLength": 363031,"FileName":"chromeicon.png"}]}'
data = {}
data["Localfiles"] = []
def test(datas):
test = json.loads(str(datas))
for x in range(0,(len(test["Localfiles"]))):
if x not in data:
data["Localfiles"].append({
"FileName":test["Localfiles"][x]["FileName"],
"FileLength":test["Localfiles"][x]["FileLength"],
"IPAddress":test["Localfiles"][x]["IPAddress"]
})
L = data["Localfiles"]
data["Localfiles"] = list({v['FileName']:v for v in L}.values())
return data
这给了我:
{'Localfiles': [{'FileLength': 363031,
'FileName': 'chromeicon.png',
'IPAddress': ['217.120.103.158']}]}
我正在尝试在 python 中开发某种点对点系统。当客户端连接到我的服务器时,客户端将所有文件发送到特定位置。当客户端向服务器发送数据时,它通过 json 执行此操作。当服务器从客户端获取信息时,它会打印它。一个例子:
{
"Localfiles": [{
"IPAddress": ["217.120.103.158"],
"FileLength": 363031,
"FileName": "chromeicon.png"
}, {
"IPAddress": ["217.120.103.158"],
"FileLength": 363031,
"FileName": "chromeicon.png"
}]
}
这是客户端两次发送有关某个位置的信息(一个只有 1 个文件的文件夹)时打印的内容。我怎样才能做到,当我将数据附加到我的 json 数组时,它不会显示为重复项。
这是我的代码:
from twisted.internet import reactor, protocol
import os, json
data = {}
data['Localfiles'] = []
def test(datas):
test = json.loads(datas)
for x in range(0,(len(test['Localfiles']))):
if x not in data:
data['Localfiles'].append({
'FileName':test['Localfiles'][x]['FileName'],
'FileLength':test['Localfiles'][x]['FileLength'],
'IPAddress':test['Localfiles'][x]['IPAddress']
})
print json.dumps(data) +"\n"
return data
class Echo(protocol.Protocol):
def dataReceived(self, data):
try:
self.transport.write(json.dumps(test(data)))
except ValueError:
print "nope"
def main():
factory = protocol.ServerFactory()
factory.protocol = Echo
reactor.listenTCP(5000,factory)
reactor.run()
if __name__ == '__main__':
main()
迭代完值后如何折叠字典:
import json
dic = '{"Localfiles":[{"IPAddress": ["217.120.103.158"],"FileLength": 363031,"FileName": "chromeicon.png"},{"IPAddress": ["217.120.103.158"],"FileLength": 363031,"FileName":"chromeicon.png"}]}'
data = {}
data["Localfiles"] = []
def test(datas):
test = json.loads(str(datas))
for x in range(0,(len(test["Localfiles"]))):
if x not in data:
data["Localfiles"].append({
"FileName":test["Localfiles"][x]["FileName"],
"FileLength":test["Localfiles"][x]["FileLength"],
"IPAddress":test["Localfiles"][x]["IPAddress"]
})
L = data["Localfiles"]
data["Localfiles"] = list({v['FileName']:v for v in L}.values())
return data
这给了我:
{'Localfiles': [{'FileLength': 363031,
'FileName': 'chromeicon.png',
'IPAddress': ['217.120.103.158']}]}