py jsonq
py jsonq是一个简单、优雅的python包,可以查询任何类型的json数据。通过在json上提供类似orm的查询,这将使您的生活更轻松。
安装pip install pyjsonq
用法
只需在开始使用前导入软件包即可。
作为python包:frompyjsonqimportJsonQ
通过从文件导入json数据,您可以立即开始使用此包:JsonQ('data.json')
或JsonQ(data={"id":1,"name":"shaonty"})# must assign data if you want to pass data instead of file_path
您可以使用各种查询方法开始查询数据,例如where、or_where、where_in、where_not_in、where_start_with、where_ends_with、where_contains等等。此外,您还可以使用总和、计数、分组、排序、最大值、最小值等来聚合查询后的数据。
让我们看一个简单的例子:# sample Json datajson_object={products:[{id:1,city:'bsl',name:'iPhone',cat:1,price:80000.5},{id:2,city:null,name:'macbook pro',cat:1,price:150000},{id:3,city:'dhk',name:'Redmi 3S Prime',cat:2,price:12000},{id:4,city:'bsl',name:'macbook air',cat:2,price:110000}]};qe=JsonQ(file_path)res=qe.at('products').where('cat','=',2).get()print(res)"""This will print[{id: 3,city: 'dhk',name: 'Redmi 3S Prime',cat: 2,price: 12000},{id: 4,city: 'bsl',name: 'macbook air',cat: 2,price: 110000}]"""
假设我们想得到查询结果的价格总和。我们可以通过调用sum()方法而不是get():res=qe.at('products').where('cat','=',2).sum('price')print(res)"""It will print:122000"""
让我们探索完整的api,看看这个库还能为您带来什么魔力。
让我们?
API
下面的api示例基于这里给出的示例json数据。要更好地了解这些示例,请先查看json数据。每个api的详细示例也可以在这里找到。
API列表:
get()
此方法将执行查询并返回结果数据。在使用了一些查询方法之后,您需要最终调用它。详细信息可在其他API示例中找到。
来自文件(文件路径)
此方法是set json文件路径的替代方法。详细信息可在其他API示例中找到。
示例:
假设您有一个名为data.json的文件。您可以这样设置路径:qu=JsonQ().from_file('data.json').at('users').where('id','=',1).get()
位于(路径)路径--要开始查询的数据的路径层次结构。
默认情况下,查询将从给定的json数据的根开始。我如果要首先从要开始查询的位置移动到数据的嵌套路径层次结构,请使用此方法。跳过路径参数或指定'。作为参数也将从根数据开始查询。
示例:
假设您希望开始查询json数据的'users'属性的值。你可以这样做:qu=JsonQ(file_path).at('users').where('id','=',1).get()
如果您想深入层次结构,可以这样做:qe=JsonQ(file_path).at('users.5.visits').where('year','=',2011).get()
请参见此处的详细示例。
位置(键、运算符、值)键--数据的属性名。或者您可以在这里传递一个函数,在其中对多个查询进行分组。请参见示例中的详细信息
值--要匹配的值。它可以是一个int,string,bool甚至float——这取决于运算符
运算符--用于匹配的操作数。可以使用以下操作数:=:用于相等匹配
eq:与=相同
< L> >代码>!=:对于弱不相等匹配
neq:与相同!=
>;:检查数据中给定键的值是否大于值
gt:与>;相同
<;:检查数据中给定键的值是否小于值
lt:与<;相同
>;=:检查数据中给定的键的值是否大于或等于值
gte:与>;=相同
<;=:检查数据中给定的键的值是否小于或等于值
lte:与<;=相同
null:检查数据中给定键的值是否为null(value对于此运算符,可以省略where()中的参数value)
not null:检查数据中给定的键的值是否为notnull(value对于此运算符,可以省略where()中的参数value)
在中:检查数据中给定的键的值是否存在于给定的值中。值应该是一个简单的列表
not in:检查给定值val中是否不存在数据中给定键的值。val应该是一个简单的列表
starts with:检查数据中给定的键的值是否以给定的值开头(前缀为)。这只适用于字符串类型数据。
ends with:检查数据中给定的键的值是否以给定的值结尾(后缀为)。这只适用于字符串类型数据。
包含:与中的相同
示例:
假设您希望找到具有idof1的'用户'。你可以这样做:qu=JsonQ(file_path).at('users').where('id','=',1).get()
您可以在其中添加多个条件。它将在这些多个where条件之间通过和ing给出结果。pip install pyjsonq1
请参见此处的详细示例。
或_where(键、运算符、值)
或_where()的参数与where()的参数相同。where()与或_where()之间的唯一区别是:条件由或_where()方法将在其他条件下处理结果。
例如,如果要查找具有idof1或2的用户,可以这样做:pip install pyjsonq2
请参见此处的详细示例
输入位置(键,值)键--数据的属性名
值--它应该是一个列表
此方法的行为类似于where(key,'in',value)方法调用。
不在的位置(键,值)键--数据的属性名
值--它应该是一个列表
此方法的行为类似于where(key,'notin',value)方法调用。
其中为空(键)键--数据的属性名
此方法的行为类似于where(key,'=','none')方法调用。
其中不为空(键)键--数据的属性名
此方法的行为类似于where(key,'!=','无')方法调用。
以(键、值)开头的位置
键--数据的属性名
值--应该是字符串
此方法的行为类似于where(key,'startswith',value)方法调用。
以(键、值)结尾的位置
键--数据的属性名
值--应该是字符串
此方法的行为类似于where(key,'endswith',value)方法调用。
U包含的位置(键,VAL)键--数据的属性名
值--应该是字符串或列表
此方法的行为类似于where(key,'contains',val)方法调用。
总和(属性)属性--数据的属性名
示例:
假设您希望找到'products'的'price'之和。你可以这样做:pip install pyjsonq3
如果要聚合的数据是纯列表,则不需要传递"property"参数。
请参见此处的详细示例
count()
它将返回集合中的元素数。
示例:
假设您想查找'products'属性中有多少元素。你可以这样做:pip install pyjsonq4
请参见此处的详细示例
大小()
这是count()的别名方法
max(属性)属性--数据的属性名
示例:
假设您希望找到'products'的'price'的最大值。你可以这样做:pip install pyjsonq5
如果要查询的数据是纯数组,则不需要传递"property"参数。
请参见此处的详细示例
min(属性)属性--数据的属性名
示例:
假设您希望找到'products'中'price'的最小值。你可以这样做:pip install pyjsonq6
如果要查询的数据是纯数组,则不需要传递"property"参数。
请参见此处的详细示例
平均值(属性)属性--数据的属性名
示例:
假设你想找出t的平均价格他说"产品"。你可以这样做:pip install pyjsonq7
如果要查询的数据是纯数组,则不需要传递"property"参数。
请参见此处的详细示例
first()
它将返回集合的第一个元素。
示例:pip install pyjsonq8
请参见此处的详细示例
last()
它将返回集合的最后一个元素。
示例:pip install pyjsonq9
请参见此处的详细示例
nth(索引)索引--要返回的元素的索引。
它将返回集合的第n个(n从0开始)元素。如果给定的索引是一个正的值,它将从头返回第n个元素。如果给定的索引是一个负值,它将从末尾返回第n个元素。
示例:frompyjsonqimportJsonQ0
请参见此处的详细示例
分组依据(属性)属性--要按其对集合进行分组的属性。
示例:
假设您希望基于'location'属性对'users'数据进行分组。你可以这样做:frompyjsonqimportJsonQ1
请参见此处的详细示例
排序(顺序)顺序--如果跳过'order'属性,默认情况下,数据将按升序排序。您需要将'desc'作为'order'参数传递,以便按降序对数据进行排序。此外,您还可以在'order'参数中传递一个比较函数,以定义您自己的逻辑来对数据进行排序。
注意:此方法应用于普通数组。如果要对对象数组进行排序,则应使用稍后介绍的sortby()方法。
示例:
假设您想对'arr'数据进行排序。你可以这样做:frompyjsonqimportJsonQ2
请参见此处的详细示例
按(属性、顺序)排序
属性--您需要传递进行排序的属性名。
顺序--如果跳过'order'属性,默认情况下,数据将按升序排序。您需要将'desc'作为'order'参数传递,以便按降序对数据进行排序。此外,您还可以在'order'参数中传递一个比较函数,以定义您自己的逻辑来对数据进行排序。
注意:此方法应用于对象数组。如果要对普通数组进行排序,应使用前面介绍的sort()方法。
示例:
假设您想对'products'的'price'数据进行排序。你可以这样做:frompyjsonqimportJsonQ3
请参见此处的详细示例
重置(数据)数据--可以是json文件路径、json字符串或json对象。如果在data参数中没有传递数据,则jsonq对象实例将重置为以前初始化的数据。
在任何时候,您都可能希望将对象实例重置为完全不同的数据集,然后对其进行查询。在这种情况下,您可以使用这种方法。
请参见此处的详细示例
clone()
它将返回对象实例的完整克隆。
请参见此处的详细示例
块(大小)
在将特定大小的数组分块后,它将返回一个完整的新数组。
请参见此处的详细示例。
错误和问题
如果您遇到任何错误或问题,请随时打开
Github
学分
特别感谢nahid bin azhar为本套餐提供的灵感和指导。
其他平台
欢迎加入QQ群-->: 979659372
推荐PyPI第三方库