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

Python,使用json.dumps()导入的字符串不能被if语句识别,为什么不能?,python,json,Python,Json,我很高兴,因为你们可能对这一点相当陌生,我正试图用一个关键字在最后一个条目处破解json文件 但是,if语句无法识别使用json.dumps()读取时的关键字end,因此循环永远不会中断 为什么不呢 from sys import argv import json import time script, filename = argv file = open(filename) jfile = json.load(file) currentIndex = 1 while Tr

我很高兴,因为你们可能对这一点相当陌生,我正试图用一个关键字在最后一个条目处破解json文件

但是,if语句无法识别使用
json.dumps()
读取时的关键字
end
,因此循环永远不会中断

为什么不呢

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"
}

}

首先将字符串或整数转换为JSON,然后进行测试。这意味着值中将有引号:

>>> import json
>>> json.dumps('end')
'"end"'
>>> json.dumps('end')[0]
'"'
>>> json.dumps('end')[-1]
'"'
使用
print
也会显示带引号的字符串值,这是因为它们是值的一部分

在进行测试时,您还需要包括以下引用:

更好的是,不要再次转储到JSON。这里有非常好的Python值:

waitTime = currentSegment['wait']
if waitTime == "end":
    break    

elapsed = time.time() - now  
time.sleep(waitTime-elapsed)
请注意,现在您也不需要将
waitTime
值再次转换为float;您可以直接将其与
已用时间
值一起使用


如果需要将json数据发送到另一个系统或再次将其保存到文件中,则只需使用
json.dumps()
。在Python本身中处理数据时,确实没有必要。

您首先将字符串或整数转换为JSON,然后进行测试。这意味着值中将有引号:

>>> import json
>>> json.dumps('end')
'"end"'
>>> json.dumps('end')[0]
'"'
>>> json.dumps('end')[-1]
'"'
使用
print
也会显示带引号的字符串值,这是因为它们是值的一部分

在进行测试时,您还需要包括以下引用:

更好的是,不要再次转储到JSON。这里有非常好的Python值:

waitTime = currentSegment['wait']
if waitTime == "end":
    break    

elapsed = time.time() - now  
time.sleep(waitTime-elapsed)
请注意,现在您也不需要将
waitTime
值再次转换为float;您可以直接将其与
已用时间
值一起使用

如果需要将json数据发送到另一个系统或再次将其保存到文件中,则只需使用
json.dumps()
。当使用Python本身处理数据时,真的没有必要。

只需使用

waitTime = currentSegment['wait']
只用

waitTime = currentSegment['wait']