Python-当json对象获得更高的数字时打印
我想创建一个脚本,使用while函数多次检查json文件。其中有一个json,看起来像:Python-当json对象获得更高的数字时打印,python,json,for-loop,Python,Json,For Loop,我想创建一个脚本,使用while函数多次检查json文件。其中有一个json,看起来像: { "names":[ { "name":"hello", "numbers":0 }, { "name":"stack", "numbers":1 }, { "name":"over", "numbers"
{
"names":[
{
"name":"hello",
"numbers":0
},
{
"name":"stack",
"numbers":1
},
{
"name":"over",
"numbers":2
},
{
"name":"flow",
"numbers":12
},
{
"name":"how",
"numbers":17
},
{
"name":"are",
"numbers":11
},
{
"name":"you",
"numbers":18
},
{
"name":"today",
"numbers":6
},
{
"name":"merry",
"numbers":4
},
{
"name":"x",
"numbers":1
},
{
"name":"mass",
"numbers":0
},
{
"name":"santa",
"numbers":4
},
{
"name":"hohoho",
"numbers":1
}
]
}
我想做的是检查每个名字的数字是否比之前的json外观增加了
def script():
with open('data.json') as f:
old_data = json.load(f)
while True:
with open('data.json') as f:
new_data = json.load(f)
if old_data < new_data:
print("Bigger!!" + new_data['name'])
old_data = new_data
else:
randomtime = random.randint(5, 15)
print("Nothing increased")
old_data = new_data
time.sleep(randomtime)
我使用了您在问题中编辑和展示的原始.json,并将您的代码重新分解为以下示例。它似乎在工作
import time
import random
import json
path_to_file = r"C:\path\to\.json"
def script():
with open(path_to_file) as f:
d = json.load(f)
old_data = 0
for a_list in d.values():
for i in a_list:
print()
for d_keys, d_values in i.items():
print(d_keys, d_values)
if type(d_values) == int and d_values > old_data:
print("Bigger!!" + i['name'])
old_data = d_values
elif type(d_values) == int and d_values < old_data:
print("Nothing increased")
old_data = d_values
randomtime = random.randint(5, 15)
time.sleep(randomtime)
script()
导入时间
随机输入
导入json
path\u to\u file=r“C:\path\to\.json”
def脚本():
打开(路径到文件)为f时:
d=json.load(f)
旧数据=0
对于d.values()中的_列表:
对于a_列表中的i:
打印()
对于d_键,i.items()中的d_值:
打印(d_键、d_值)
如果类型(d_值)=int和d_值>旧数据:
打印(“更大!!”+i['name'])
旧数据=d_值
elif类型(d_值)=int和d_值<旧数据:
打印(“无增加”)
旧数据=d_值
randomtime=random.randint(5,15)
时间。睡眠(随机时间)
脚本()
这是我收到的输出:
姓名你好号码0
名称堆栈编号1更大!!堆叠
名字超过数字2更大!!结束
名称流编号12更大!!流动
说出17个更大的数字!!怎么
名字是数字11,没有增加
请说出18个更大的号码!!你
今天的名字数字6没有增加
名字4没有增加
名称x数字1没有增加
名称质量数0没有增加
圣诞老人的名字是4个更大的!!圣诞老人
名字hohoho数字1没有增加
我使用了您在问题中编辑和展示的原始.json,并将您的代码重新分解为以下示例。它似乎在工作
import time
import random
import json
path_to_file = r"C:\path\to\.json"
def script():
with open(path_to_file) as f:
d = json.load(f)
old_data = 0
for a_list in d.values():
for i in a_list:
print()
for d_keys, d_values in i.items():
print(d_keys, d_values)
if type(d_values) == int and d_values > old_data:
print("Bigger!!" + i['name'])
old_data = d_values
elif type(d_values) == int and d_values < old_data:
print("Nothing increased")
old_data = d_values
randomtime = random.randint(5, 15)
time.sleep(randomtime)
script()
导入时间
随机输入
导入json
path\u to\u file=r“C:\path\to\.json”
def脚本():
打开(路径到文件)为f时:
d=json.load(f)
旧数据=0
对于d.values()中的_列表:
对于a_列表中的i:
打印()
对于d_键,i.items()中的d_值:
打印(d_键、d_值)
如果类型(d_值)=int和d_值>旧数据:
打印(“更大!!”+i['name'])
旧数据=d_值
elif类型(d_值)=int和d_值<旧数据:
打印(“无增加”)
旧数据=d_值
randomtime=random.randint(5,15)
时间。睡眠(随机时间)
脚本()
这是我收到的输出:
姓名你好号码0
名称堆栈编号1更大!!堆叠
名字超过数字2更大!!结束
名称流编号12更大!!流动
说出17个更大的数字!!怎么
名字是数字11,没有增加
请说出18个更大的号码!!你
今天的名字数字6没有增加
名字4没有增加
名称x数字1没有增加
名称质量数0没有增加
圣诞老人的名字是4个更大的!!圣诞老人
名字hohoho数字1没有增加
假设您的json采用以下格式:
{
"names": {
"hello": 0,
"stack": 1,
"over": 2,
"flow": 13,
"how": 17,
"are": 12,
"you": 18,
"today": 6,
"merry": 4,
"x": 1,
"mass": 0,
"santa": 4,
"hohoho": 1
}
}
我会按照以下思路做一些事情:
import json
import time
with open("data.json") as f:
old_data = json.load(f)["names"]
while True:
with open("data.json") as f:
new_data = json.load(f)["names"]
for name, number in new_data.items():
if number > old_data[name]:
print("Entry '{0}' has increased from {1} to {2}".format(name, old_data[name], number))
old_data = new_data
print("sleeping for 5 seconds")
time.sleep(5)
编辑以回答评论中发布的问题“只是好奇,假设我想在数字旁边添加另一个值等”堆栈:1,是(对每种格式都是和否),在这种情况下需要做什么?(只是一个脚本,我想从中开发)
在这种情况下,您应该按如下方式设计json输入:
{
"names": {
"hello": {
"number": 0,
"status": true
},
"stack": {
"number": 1,
"status": true
},
"over": {
"number": 2,
"status": false
},
...
}
}
for name, values in new_data.items():
if values["number"] > old_data[name]["number"]
您需要更改比较脚本中的查找,如下所示:
{
"names": {
"hello": {
"number": 0,
"status": true
},
"stack": {
"number": 1,
"status": true
},
"over": {
"number": 2,
"status": false
},
...
}
}
for name, values in new_data.items():
if values["number"] > old_data[name]["number"]
(请注意,对于状态
,您也可以将的“yes”
或的“no”
作为输入,但当您必须这样表示二进制选择时,使用布尔值必须更有用)
顺便说一句,除非您希望在这个json中包含除名称以外的对象,否则您可以省略该级别,只需将其设置为:
{
"hello": {
"number": 0,
"status": true
},
"stack": {
"number": 1,
"status": true
},
"over": {
"number": 2,
"status": false
},
...
}
在这种情况下,将old_data=json.load(f)[“names”]
替换为old_data=json.load(f)
,并将new_data=json.load(f)[“names”]
替换为new_data=json.load(f)
假设您的json是这种格式:
{
"names": {
"hello": 0,
"stack": 1,
"over": 2,
"flow": 13,
"how": 17,
"are": 12,
"you": 18,
"today": 6,
"merry": 4,
"x": 1,
"mass": 0,
"santa": 4,
"hohoho": 1
}
}
我会按照以下思路做一些事情:
import json
import time
with open("data.json") as f:
old_data = json.load(f)["names"]
while True:
with open("data.json") as f:
new_data = json.load(f)["names"]
for name, number in new_data.items():
if number > old_data[name]:
print("Entry '{0}' has increased from {1} to {2}".format(name, old_data[name], number))
old_data = new_data
print("sleeping for 5 seconds")
time.sleep(5)
编辑以回答评论中发布的问题“只是好奇,假设我想在数字旁边添加另一个值等”堆栈:1,是(对每种格式都是和否),在这种情况下需要做什么?(只是一个脚本,我想从中开发)
在这种情况下,您应该按如下方式设计json输入:
{
"names": {
"hello": {
"number": 0,
"status": true
},
"stack": {
"number": 1,
"status": true
},
"over": {
"number": 2,
"status": false
},
...
}
}
for name, values in new_data.items():
if values["number"] > old_data[name]["number"]
您需要更改比较脚本中的查找,如下所示:
{
"names": {
"hello": {
"number": 0,
"status": true
},
"stack": {
"number": 1,
"status": true
},
"over": {
"number": 2,
"status": false
},
...
}
}
for name, values in new_data.items():
if values["number"] > old_data[name]["number"]
(请注意,对于状态
,您也可以将的“yes”
或的“no”
作为输入,但当您必须这样表示二进制选择时,使用布尔值必须更有用)
顺便说一句,除非您希望在这个json中包含除名称以外的对象,否则您可以省略该级别,只需将其设置为:
{
"hello": {
"number": 0,
"status": true
},
"stack": {
"number": 1,
"status": true
},
"over": {
"number": 2,
"status": false
},
...
}
在这种情况下,将old_data=json.load(f)[“names”]
替换为old_data=json.load(f)
,将new_data=json.load(f)[“names”]
替换为new_data=json.load(f)
,我检查了你的.json,发现它的格式不正确。这是指示错误的错误。错误:第54行上的分析错误:…ers“:1}}],“总数------------------“^Expecting',',']',got'}”使用此链接验证.json是否正确:不能吗