Python的JSON解码器,可以从淤泥中提取数据

dirtyjson的Python项目详细描述


:mod:`dirtyjson`---JSON解码器
======================

…module::dirty json
:概要:从脏文件中解码json数据。
…moduleauthor::scott maxwell<;scott@codecobblers.com>;

语法(ecma-262第三版)的子集。

:mod:`dirtyjson`是用于提取json类型的数据来自.js
文件。返回的数据结构包含有关行号和列号的信息,因此可以输出更有用的错误消息。输入还可以包括单引号、行注释、内联注释、悬空逗号、
不带引号的单字键,以及十六进制和八进制数字。

通过提供
行号和列号上下文,脏的json文件可以用作复杂数据解析器或编译器的源输入


:mod:`dirtyjson`公开了标准库用户熟悉的api
:mod:`marshal`和:mod:`pickle`模块。但是,:mod:`dirtyjson`只提供
加载功能。要编写json,请使用标准的
:mod:`json`库或:mod:`simplejson`.

…注::

github:
https://github.com/codecobblers/dirtyjson

/*不是fu*/{bar:['baz',null,1.0,2,]}]然后忽略这个垃圾""
>;>d==obj
true
>;>pos=d.attributes(0);数组中第一个元素的行/列位置
>;>pos.line==1
true
>;pos.column==2
true
>;>;pos=d[1]。"bar"键/值对的属性("bar")行/列位置
>;>;pos.key.line==1
true
>;>;pos.key.column==22
true
>;>;pos.value.line==1
true
>;pos.value.column==27
true

io=stringio('["streaming api"]')
>;>>dirtyjson.load(io)[0]='streaming api'
true

parse_float=decimal)==decimal('1.1')





基本用法
----


…函数::load(fp[,encoding[,parse_float[,parse_int[,parse_constant[,search_for_first_object]]]]])


|:类:`attributedict`
+——+——+——+——+
数组:类:`attributedilist`
+——+——+——+——+——+——+——
字符串unicode
+——+——+————+————+——
数字(int)int,long
+——+——+——+——+
number(real)float|
+——+——+——+——+—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————|
+——+——+——+——+

它超出了json规范。

:exc:如果给定文档无效,将引发"dirtyjson.error"。


然后必须指定适当的*encoding*名称。
不允许使用非基于ascii的编码(如ucs-2),并且
应使用``codecs.getreader(fp)(encoding)``包装,或者仅将
解码为:class:`unicode`对象并传递给:func:`loads`。默认的
"utf-8"设置是最快的,应该尽可能使用。

如果您的代码只需要:class:`unicode',则适当的
解决方案是用如上所示的读取器包装fp。

*parse_float*如果指定,将使用要解码的每个json
float的字符串调用。默认情况下,这相当于`` float(num_str)``。
这可用于对json float使用另一个数据类型或解析器
(例如:类:`decimal.decimal`)。

*parse_int*如果指定,则将使用要解码的每个
json int的字符串的int调用。默认情况下,这相当于"int(num_str)"。
对于json整数,可以使用其他数据类型或解析器
(例如:类:`float`)。

。注意::

与标准的:mod:`json`模块不同,:mod:`dirtyjson`在传递给传递的转换器之前始终是
``int(num_str,0)``参数。这将启用十六进制数和八进制数的自动处理。

*如果指定parse_constant*,则将使用以下字符串之一调用:``true``,``false`,``null`,````'-infinity`,``infinity`,`
``nan``。如果遇到无效的json数,则可以使用此选项引发异常,或者为这些常量中的任何一个提供替代值。

*如果为"true",则搜索"search"以查找"first"对象,如果为"true",则解析器将搜索"first"或"the"。这对于从javascript文件中读取对象非常有用。函数::将(s[,encoding[,parse_float[,parse_int[,parse_constant[,search_for_first_object[,start_index]]]]])


反序列化*s*(a:类:`str`或:类:`unicode`实例,包含json
文档)加载到python对象。:exc:`dirtyjson.error`如果给定的json文档无效,则将引发


不允许使用非基于ascii的编码(如ucs-2),并且应首先解码为:类:`unicode'。


如果*s*是:类:`str',则解码后的json字符串(仅包含
ascii字符)可以解析为:类:`str',以提高性能并
存储空间。原因。如果您的代码只需要:class:`unicode',则相应的
解决方案是在调用加载之前将*s*解码为:class:`unicode'。

*start_index*如果非零,将导致解析器开始处理rom
指定的偏移量,在保持正确的行号和列号的同时。
这对于从javascript文件的中间读取对象非常有用。


其他参数的含义与:func:`load`.


exceptions
--


异常::dirtyjson.error(msg,doc,pos)


属性::msg

未格式化错误消息

…属性::doc

属性:pos

解析失败的文档的开始索引

…属性::行号

pos对应的行

…attribute::colno



attribute dict和attributedlist对应的列
每一个实际上都是其基类型(``dict``或``list``)的
子类,可以像
标准类一样使用,但它们已经得到增强,可以存储每个
元素的属性。我们使用这些属性来存储行号和列号。您可以使用
该信息将用户引回到原始
源文件中的确切位置。

class::position()

这是一个非常简单的实用程序类,包含"line"和"column"。
它用于存储:class:`attributedlist`
和:class:`keyvalueposition`

class::keyValuePosition()

这是另一个非常简单的实用程序类,它包含"key"和"value"。每一个都是:class:`position`对象,指定键和值在原始源字符串/文件中的
位置。它用于存储类的位置属性:`attributedict`.

。class::attributedict()

dict的一个子类,其行为与"dict"完全相同,只是它
保持类似于"orderedict"的顺序,并允许存储每个键/值对的属性。

method::add_with_attributes(self,key,value,attributes)


将底层"dict"中的*key*设置为*value*,并将
作为*attributes*传入的内容存储起来,以便以后检索。在我们的例子中,
我们存储:类:`keyvalueposition`.

…方法::attributes(self,key)

在我们的例子中,我们存储
:类:`keyvalueposition`。检索位置信息如下:

键行=pos.key.line
键列=pos.key.column
值行=pos.value.line
值列=pos.value.column

class::attributedList()

``list``的一个子类,其行为与``list``完全相似,只是它允许为每个值存储属性。

方法::追加(self,value,attributes=none):


将*value*追加到列表,将*attributes*追加到关联位置。
在我们的示例中,我们存储:类:`position`.

方法::attributes(self,index)

返回给定*索引*处的值的属性。在我们的例子中,
我们存储:类:`position`。检索位置信息如下:

pos=l.属性(索引)
value=pos.line
value=pos.column

注意:

这个类*不*健壮。如果插入或删除项,则属性
将不同步。把它变成一个非幼稚类将是一个很好的
增强。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
CentOS上的java Spring Boot简易应用程序需要很长时间才能启动   java如何检查字符串值是否等于null?   收集器中的java映射值。分组方式()   java需要支持Azure AD B2C webapp集成   java如何加入线程以停止它?   java如何使用意图传递类的对象?   java如何在战争环境中发现CDI生产者?   多模块项目中java奇怪的编译器行为   java如何在web应用程序中管理密码?   java从http服务器、filehandler中删除冗余代码   java使用反射来获取泛型类的字段   java Spring MVC/Hibernate/MySQL 400错误请求错误   给定正整数a的java幂为3   在Java中将元素拆分为不同数量的列表?   java展开折叠窗格