从API迭代JSON获得第一个True数字? py2.7

时间:2019-04-15 22:21:32

标签: python json api

我对Python相当陌生,对JS更加熟悉,因此我对如何做到这一点有些迷茫。

基本上,我从Google的API中获得了JSON,第一个结果并不总是符合我的需要。但是我只需要返回true的第一个结果即可。

我很确定我在多个区域中语法错误,但是我需要第一个imageUrl,其中[gi] ['pagemap']为真。

item_len = len(deserialized_output['items'])

for gi in range(item_len):
    def loop_tgi():
        if deserialized_output['items'][gi]['pagemap'] is True:
            imageUrl = deserialized_output['items'][gi]['pagemap']['cse_image'][0]['src']
            break
        loop_tgi()

1 个答案:

答案 0 :(得分:0)

您可以直接遍历项目,而无需使用索引

在Python循环中泄漏了一个变量,因此当您从循环中中断时,gi变量将具有您所需要的(或最后一个值)。

要克服“或最后一个值”,我们可以使用else来检查我们是否完整循环了

public function validationIpv4OrFqdn(Validator $validator)
{
    $validator
    ->add('address', 'notEmpty', [
        // Regex for FQDN
        'rule' => ['custom', "/(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}$)/i"],
        'message' => __('Invalid FQDN')
    ]);
    $validator
      ->add('address', 'notEmpty', [
        'rule' => ['ip', 'ipv4'],
        'message' => __('Invalid IP Address')
    ]);
    return $validator;
}

稍后您尝试访问for gi in deserialized_output['items']: if gi['pagemap'] is True: break else: gi = None # or throw some sort of exception when there is no good elements if gi: # checking that returned element is good print(gi) # now we can use that element to do what you want! imageUrl = gi['pagemap']['cse_image'][0]['src'] 时,我有点担心您的gi['pagemap'] is True。这意味着gi['pagemap']['cse_image']不是布尔值,而是某种对象。

如果这是字典,则如果该字典不为空,则可以检查gi['pagemap']为True。但是如果if gi['pagemap']:gi['pagemap'] is True

,则False将是gi['pagemap']