跳转到主要内容

解析JSON的一种更简单的方式。

项目描述

https://travis-ci.org/skorokithakis/jsane.svg?branch=master

JSane是一个JSON“解析器”,它使得属性访问更加容易。

三行简介

>>> import jsane
>>> j = jsane.loads('{"foo": {"bar": {"baz": ["well", "hello", "there"]}}}')
>>> j.foo.bar.baz[1].r()
u'hello'

动机

想象一下场景。你是一名穿梭于各大城市、痴迷于健身的开发者。有一天,一位世界级的珠宝大盗绑架了你,并要求你在30秒内黑入超级安全的银行服务器,同时一位超模在你面前进行口交。你急忙追踪网络上的协议,却惊讶地发现它使用的是JSON。嵌套的JSON,有层层叠叠的键。

毫无希望!你永远也来不及输入所有那些括号和引号!突然,你脑海中闪过一个记忆,就像一个糟糕的README中的陈词滥调。你打开shell,输入了两个词

import jsane

这一天被挽救了.

动机(非好莱坞版本)

你是否对必须逐个遍历嵌套的JSON键感到沮丧?

root = my_json.get("root")
if root is None:
    return None

key1 = root.get("key1")
if key1 is None:
    return None

key2 = key1.get("key2")
if key2 is None:
    return None

<five more times>

你的代码是否被讨厌的捕获所有异常的except块所破坏?

try:
    my_json["root"]["key1"]["key2"]["key3"]
except:
    return None

你是否厌倦了总是输入所有的大括号和引号?

my_json["root"]["key1"[""]][]"]']'"}}""]

现在有了JSane!

动机(非广告版本)

好吧,说真的,this["thing"]["is"]["no"]["fun"]。JSane让你像这样遍历.json.r()。就是这样。

用法

使用JSane非常简单,至少。它基本上是内置的json模块的一个副本。

首先,使用pipeasy_install安装它

pip install jsane

以下是它的用法示例

>>> import jsane

>>> j = jsane.loads('{"some": {"json": [1, 2, 3]}}')
>>> j.some.json[2].r()
3
您还可以加载现有的字典:
>>> j = jsane.from_dict({"hi": "there"})
>>> j.hi
'there'

如果字典包含任何在JSON中无效的数据类型(如函数),它仍然应该工作,但您需要自己处理。

由于Python是一种合理的语言,因此你可以用它搞砸的事情有限,所以JSane实际上在访问时会返回一个可遍历的对象

>>> j = jsane.loads('{"foo": {"bar": {"baz": "yes!"}}}')
>>> type(j.foo)
Traversable

如果你想在你这次疯狂的属性之旅结束时得到你的真实对象,请调用.r()

>>> j.foo.bar.r()
{"baz": "yes!"}

如果在过程中某个属性、项目或索引不存在,你将得到一个异常。你可以通过指定一个默认值来消除它

>>> import jsane

>>> j = jsane.loads('{"some": "json"}')
>>> j.haha_sucka_this_doesnt_exist.r(default="💩")
"💩"

“但是我怎么访问名为r的键呢?”你可能问。不用担心,我已经为你想好了

>>> j.key["r"].more_key.r()

困惑吗?那么就别用r作为键名。

就这些了。我对r() API并不感冒,所以如果有人有任何关于如何更好地实现我的邪恶目的的好建议,我会立即更改它。在版本1之前,没有稳定性保证。正如往常一样,semver给予,semver夺取。

需要帮助/欢迎等,主要是关于设计API。此外,如果你觉得这个库没有用,请告诉我。

许可证

BSD。或者MIT。不管LICENSE文件里写的是什么。我忘记了。但是它是宽容的,所以请放松。

自我推销

是我,Stavros。

常见问题解答

  • 你发现JSane的README疯狂吗?这很讽刺吗?

    不。

  • 这个库很棒吗?

    是的。

  • 我讨厌.r()这个方法,有没有什么方法可以避免它?

    你甚至看过了这个README吗?

    好吧,现在有一个避免它的方法。你不需要调用j.foo.bar.r(),你只需调用最后一个键,即j,foo.bar()。告诉我你的想法在这个相关的问题上。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源代码分发

jsane-0.1.2.tar.gz (4.7 kB 查看哈希值)

上传时间 源代码

构建分发

jsane-0.1.2-py3-none-any.whl (7.7 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面