跳转到主要内容

Coffeescript对象符号(CSON)解析器

项目描述

# pycson

[![构建状态](https://travis-ci.org/avakar/pycson.svg?branch=master)](https://travis-ci.org/avakar/pycson)

Python解析Coffeescript对象符号(CSON)。

## 安装

解析器已在Python 2.7和3.5上进行了测试。

pip install cson

接口与标准`json`包相同。

>>> import cson
>>> cson.loads('a: 1')
{'a': 1}
>>> with open('file.cson', 'rb') as fin
... obj = cson.load(fin)
>>> obj
{'a': 1}

## 语言

CSON没有正式的定义,只有[一个项目][1]的readme中的非正式说明。
非正式地,CSON是JSON,但使用Coffeescript语法。遗憾的是[Coffeescript][2]也没有
格式语法;它有一个规范实现。

这意味着实现中的错误会转化为语言本身的错误。

更糟糕的是,这个特定的实现插入了一个“重写器”在典型的
词法分析器/解析器对之间,声称这使得语法更简单。不幸的是,它给语言增加了
奇怪的角落情况。

这个解析器去掉了角落情况,
以换取在某些不太可能的情况下改变文档的语义。
换句话说,一些文档可能由Coffescript解析器和pycson以不同的方式解析。

以下是重要的要点(有关详细信息,请参阅[正式语法][3])。

* 允许字符串插值(`"#{test}"`),但按字面意义处理。
* 在数组和花括号内的对象中忽略空白。
(Coffeescript需要一致的缩进)。
未加花括号的对象贪婪地消耗尽可能多的键/值对。
未加花括号的对象中的所有行都必须具有相同的缩进。这是唯一一个
空白有意义的的地方。没有针对部分缩进的特殊规定。
要使两行具有相同的缩进,它们的最大前导空格和制表符序列必须相同(仅Coffeescript跟踪空白字符的数量)。
必须相同(Coffeescript仅跟踪空白字符的数量)。
* 未加花括号的对象如果不在其自己的行上开始,将永远不会跨越多行。
* 行尾的逗号可以始终删除而不改变输出。

我相信上述规则使解析无歧义。

此示例演示了缩进的效果。

# 包含单个元素的数组:具有三个键的对象。
[
a: 1
b: 2
c: 3
]

# 包含三个元素的数组:具有一个键的对象。
[
a: 1
b: 2
c: 3
]

# 包含两个对象,第一个对象有一个键。
[ a: 1
b: 2
c: 3 ]

注意,pycson可以正确解析所有JSON文档(Coffeescript不能,因为
空格和字符串插值)。

[1]: https://github.com/bevry/cson
[2]: https://coffeescript.node.org.cn/
[3]: grammar.md

项目详情


下载文件

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

源分布

cson-0.8.tar.gz (6.3 kB 查看哈希值)

上传时间

构建分布

cson-0.8-py2.py3-none-any.whl (6.7 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下机构支持

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