Python-当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"

我想创建一个脚本,使用while函数多次检查json文件。其中有一个json,看起来像:

    {  
   "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是否正确:不能吗