You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用json.loads提取JSON中linkBoleto值失败求助

问题:无法从API返回的JSON中提取linkBoleto字段

能正常获取API返回的数据,但使用json.loads解析后,无法定位到目标字段linkBoleto。

JSON数据结构

{   
   "retorno":{   
      "contasreceber":[   
         {   
            "contareceber":{   
               "id":"13123121",
               "situacao": "aberto", 
               "dataEmissao":"2017-03-09",
               "vencimentoOriginal":"2017-03-09",
               "vencimento":"2017-03-09",
               "competencia":"2017-03-01",
               "nroDocumento":"0123456",
               "valor":15.00,
               "saldo":0.00,
               "historico":"Referente ao pedido de venda nº 423",
               "categoria":"Vendas",
               "idFormaPagamento": "123",
               "portador":"CEF",
               "nroNoBanco":"00100358-56",
               "vendedor":"Vendedor exemplo",
               "pagamento": {
                    "totalPago": 15.00,
                    "totalJuro": 0,
                    "totalDesconto": 0,
                    "totalAcrescimo": 0,
                    "totalTarifa": 0,
                    "data": "2017-03-09"
               },
               "ocorrencia":"Unica",
               "linkBoleto":"https://www.bling.com.br/doc.view.php?132",
               "cliente":{   
                  "nome":"Organisys Software",
                  "cpf_cnpj":"00.000.000/0000-1",
                  "tipoPessoa":"J",
                  "ie_rg":"0000000000",
                  "endereco":"Rua Barão do Rio Branco",
                  "numero":"000",
                  "complemento":"Sala 000",
                  "cidade":"Bento Gonçalves",
                  "bairro":"Centro",
                  "cep":"00.000-000",
                  "uf":"RS",
                  "email":"teste@organisys.com.br"
               }
            }
         }
      ]
   }
}

尝试的代码

import requests
import json

cnpj_consulta = '00.000.000/0000-1'
api_key = 'my-api-key'
url = 'https://bling.com.br/Api/v2/contasreceber/json/'
f_key ='&apikey='
f_cnpj = '&filters=cnpj'
op = '['
cl = ']'

r = requests.get(f'{url}{f_key}{api_key}{f_cnpj}{op}{cnpj_consulta}{cl}')

y = json.loads(r.content)

print(y['linkBoleto'])

解决方案

问题出在取值路径错误:linkBoleto不在JSON的根层级,而是嵌套在多层结构里,正确的层级是:
retorno -> contasreceber(数组)-> 数组元素 -> contareceber -> linkBoleto

修正后的代码

import requests
import json

cnpj_consulta = '00.000.000/0000-1'
api_key = 'my-api-key'
url = 'https://bling.com.br/Api/v2/contasreceber/json/'
params = {
    'apikey': api_key,
    'filters': f'cnpj[{cnpj_consulta}]'
}

# 用params传递参数更规范,避免字符串拼接出错
r = requests.get(url, params=params)
y = json.loads(r.content)

# 逐层访问目标字段,同时添加空值判断避免报错
if y.get('retorno', {}).get('contasreceber'):
    link_boleto = y['retorno']['contasreceber'][0]['contareceber']['linkBoleto']
    print(link_boleto)
else:
    print("未找到相关收款记录或linkBoleto字段")

说明

  1. 替换字符串拼接参数的方式,改用requests.get的params参数,更安全且易维护。
  2. 添加空值判断逻辑,避免因API返回空数组或字段缺失导致的KeyError。
  3. 严格按照JSON层级结构取值,确保定位到正确的目标字段。

内容的提问来源于stack exchange,提问作者Christian Rodrigues

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:10:45