Questão nº 42
Questão de Análise de Sistemas · FGV TJDFT 2022 (nº 42)
No contexto do Python 3.9, analise o trecho a seguir.
```python
s1 = "{\"nome\": \"Paulo\", \"cep\": "99999-999"}"
s2 = "[\"um\", \"dois\"]"
s3 = "true"
s4 = "null"
print(json.loads(s1))
print(json.loads(s2))
print(json.loads(s3))
print(json.loads(s4))
```
Dado que "`\`" funciona como escape character, o resultado exibido pela execução desse trecho é:
- A`{'nome': 'Paulo', 'cep': '99999-999'}`
`['um', 'dois']`
`True`
`None` (alternativa correta) - B`{'nome': 'Paulo', 'cep': '99999-999'}`
`('um', 'dois')`
`true`
`Null` - C`{nome: 'Paulo', cep: '99999-999'}`
`('um', 'dois')`
`true`
`None` - D`{nome: 'Paulo', cep: '99999-999'}`
`['um', 'dois']`
`True`
`None` - E`{nome: 'Paulo', cep: '99999-999'}`
`['um', 'dois']`
`true`
`Null`
Resposta comentada
Gabarito Alternativa A
Conceito-chave: json.loads() converte uma string em formato JSON para o tipo correspondente do Python: objetos {} viram dict, arrays [] viram list, true/false viram True/False e null vira None. O \ escapa as aspas internas da string, então s1 é uma string válida contendo {"nome": "Paulo", "cep": "99999-999"}.
- (A) Correta: É o gabarito.
json.loads(s1)retorna{'nome': 'Paulo', 'cep': '99999-999'}(dict),json.loads(s2)retorna['um', 'dois'](list),json.loads(s3)retornaTrue(bool) ejson.loads(s4)retornaNone(NoneType). - (B) Incorreta: Erra ao trocar
listportuple(('um', 'dois')) e ao mantertrue/Nullcomo strings, masjson.loadsconverte paraTrueeNone. - (C) Incorreta: Erra ao mostrar
{nome: 'Paulo', cep: '99999-999'}sem aspas nas chaves (dict exige aspas) e ao usartupleetrue(string), quando o correto élisteTrue. - (D) Incorreta: Erra ao omitir as aspas nas chaves do dict (
{nome: ...}), poisjson.loadssempre gera chaves como strings, exibidas com aspas simples. - (E) Incorreta: Erra ao omitir aspas nas chaves, manter
truecomo string (deveria serTrue) eNull(deveria serNone).
Armadilha da banca (no distrator mais tentador, B): A pegadinha está em confundir json.loads com eval ou com a sintaxe de tuple. Muitos alunos acham que arrays JSON [...] viram tuplas, mas json.loads sempre retorna list para arrays. Além disso, a banca usa true/null minúsculos (válidos em JSON) para tentar fazer você acreditar que eles permanecem como strings, mas o Python os converte para True e None.
Fonte: FGV TJDFT 2022 Analista Judiciário - Análise de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.