我正如你可能会收集相当新的一样,并试图通过使用关键字来读取json文件以在最后一个条目处中断。
但是,使用end
读取关键字json.dumps()
时,if语句无法识别,因此循环永远不会中断。
为什么不呢?
from sys import argv
import json
import time
script, filename = argv
file = open(filename)
jfile = json.load(file)
currentIndex = 1
while True:
now = time.time()
currentSegment = jfile[str(currentIndex)]
print json.dumps(currentSegment) #do stuff
currentIndex = currentIndex + 1
waitTime = json.dumps(currentSegment['wait'])
print waitTime
if waitTime == "end": #look for keyword "end", break loop.
print "break"
break
waitTime = float(waitTime)
elapsed = time.time() - now
time.sleep(waitTime-elapsed)
json文件看起来像这样:
{
"1" : {
"unit" : "feed.1",
"time" : 500,
"target" : 92.0,
"wait" : 1
}
,
"2" : {
"unit" : "feed.2",
"time" : 3000,
"target" : 10.0,
"wait" : 0.5
}
,
"3" : {
"unit" : "feed.1",
"time" : 4000,
"target" : 0.0,
"wait" : 1
}
,
"4" : {
"unit" : "feed.3",
"time" : 500,
"target" : 180.0,
"wait" : "end"
}
}
答案 0 :(得分:3)
您正在将字符串或整数转换为JSON first ,然后正在对此进行测试。这意味着值中包含引号:
>>> import json
>>> json.dumps('end')
'"end"'
>>> json.dumps('end')[0]
'"'
>>> json.dumps('end')[-1]
'"'
使用print
会显示带引号的字符串值,因为它们是值的一部分。
测试时,您还需要包含 :
的引号if waitTime == '"end"':
更好的是,不要再次转储到JSON 。你在这里有非常好的Python值:
waitTime = currentSegment['wait']
if waitTime == "end":
break
elapsed = time.time() - now
time.sleep(waitTime-elapsed)
请注意,现在您不需要再次将waitTime
值转换为浮动值;您可以直接使用elapsed
值。
如果您需要将JSON数据发送到另一个系统或再次将其保存到文件中,则只需使用json.dumps()
。在使用Python本身的数据时,确实没有必要。
答案 1 :(得分:1)
只需使用
waitTime = currentSegment['wait']