Perguntas da entrevista do Python treze (json)

O que é JSON?

JSON (JavaScript Object Notation, JS Object Notation) é um formato leve de troca de dados. Ele é baseado em um subconjunto do ECMAScript (a especificação JS desenvolvida pela European Computer Association) e usa um formato de texto que é completamente independente da linguagem de programação para armazenar e representar dados.

  • Vantagem
  1. Hierarquia concisa e clara
  2. Fácil de ler e escrever
  3. Fácil análise e geração de máquinas
  4. Alta eficiência de transmissão em rede
  • Desvantagens
  1. Se você não conhece a estrutura do JSON e analisa o JSON, é um pesadelo (pode ser resolvido com ferramentas)
  2. Quando os dados do json são muito longos, caímos na pesquisa tediosa e complexa do nó de dados (pode ser recuperada usando ferramentas)

O que é serialização e desserialização? Quais são as quatro funções comumente usadas na serialização json?

O processamento de dados JSON é aproximadamente o mesmo que o método fornecido por pickle. No entanto, quando o JSON processa dados, ele pode processar mais objetos de dados do que módulos pickle. Em geral, listas, dicionários, coleções, tuplas e seqüências de caracteres no Python podem ser serializadas e desserializadas usando JSON.

Serialização de dados JSON

json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

Serialize o objeto obj para a sequência de formato JSON

"""

obj:需要序列化的数据

skipkeys:一般情况下,有效的JSON串应该是类似字典这种键值对的格式。Python中如果判断JSON中的键不是Python基本类型,就会抛出TypeError异常。如果该参数为true,则“dict”键不是基本类型('str', 'int', 'float`, 'bool', 'None')将被跳过而不是引发'TypeError'异常。默认为False。

ensure_ascii:如果该参数为False,则返回值可以包含非ascii码字符。如果为True,则所有这些字符在JSON字符串中转义。

check_circular:如果该参数被设置为False,则容器类型的数据结构循环引用检查将被忽略,这样可能引发溢出错误(可能更糟)。

allow_nan:如果为false,则为'ValueError'在中序列化超出范围的'float'值('nan','inf','-inf')严格遵守JSON规范,而不是使用JavaScript等价物('NaN','Infinity','-Infinity')。

indent:表示缩进级别。如果是非负整数,那么JSON数组元素和对象成员将以该缩进级别很好地打印出来。缩进级别0将只插入换行符。默认为“None”是最紧凑的缩进。

separators:如果指定,应该是类似(item_separator,key_separator)这样的元组。item_separator为元素间隔,key_separator为键值对的间隔,都是字符串格式,默认值是(', ', ': '),如果上面的indent参数为是'None'并且separators参数为默认,可以获得最紧凑的JSON表示。否则,应该指定该参数为(',', ':')以消除空白。

default:是一个返回可序列化对象的函数或者抛出TypeError异常。一般情况下,我们使用dumps方法可以处理Python默认的几种数据类型,比如,字典、列表、字符串、集合等,当我们需要将别的序列处理为JSON格式的字符串时,我们就要重写default参数的方法,default参数传入一个返回可序列化对象的函数,或者是TypeError异常。

cls:当使用默认JSON格式类型时,该参数没有用处,只有重写default参数中的方法时,cls可以作为参数传入,这个过程不常用。

sort_keys:如果该参数为True(默认为False),则字典将按键排序。
"""

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

Serialize "obj" em um fluxo no formato JSON para fp (um objeto de fluxo de arquivo que suporta o método write ()).

Desserialização de dados JSON

json.load (fp, *, cls = nenhum, object_hook = nenhum, parse_float = nenhum, parse_int = nenhum, parse_constant = nenhum, object_pairs_hook = nenhum, ** kw)

Desserialize o fp (um objeto de fluxo de arquivo que suporta o método read ()) para converter um documento JSON em um objeto Python.

"""
object_hook:是一个可选函数,我们知道,从JSON文档中转化出来的Python对象类型都是默认的,比如字典。当我们需要自定义编码器(即自定义非Python类型的数据结构)时,就可以在object_hook中传入相应的函数。

parse_float:可选参数,默认是将float(num_str),按照float提供的方法将数值字符串转化为float类型。该参数指定时,将使用指定的数据类型或解析器处理num_str数据(如:decimal.decimal)

parse_int:可选参数,作用类似parse_float,该参数作用是为处理整形字符串自定义数据类型或解析器(默认int(num_str), 可以选择将整形处理为浮点类型,如:float)

parse_constant:可选参数,值可以选择使用-Infinity,Infinity,NaN。如果遇到无效的JSON内容,则可以该参数定义的字符串引发异常。

object_pairs_hook:可选函数,效果类似object_hook,用于自定义序列编码器,当object_pairs_hook和object_hook同时被传入时,优先使用object_paris_hook的定义。


"""

json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
Converter string json (pode ser str, bytes, instância de objeto bytearray) em objeto Python

Publicado 44 artigos originais · gostei 0 · visitas 1226

Acho que você gosta

Origin blog.csdn.net/weixin520520/article/details/105451804
Recomendado
Clasificación