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
注意:
这个类*不*健壮。如果插入或删除项,则属性
将不同步。把它变成一个非幼稚类将是一个很好的
增强。
======================
…module::dirty json
:概要:从脏文件中解码json数据。
…moduleauthor::scott maxwell<;scott@codecobblers.com>;
: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.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
注意:
这个类*不*健壮。如果插入或删除项,则属性
将不同步。把它变成一个非幼稚类将是一个很好的
增强。