Python,用json.dumps()导入的字符串不能被if语句识别,为什么不呢?

时间:2014-07-02 10:59:53

标签: python json

我正如你可能会收集相当新的一样,并试图通过使用关键字来读取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"
}

}

2 个答案:

答案 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']