HJSON:可注释、更简洁易用的JSON用户接口及其在Python中的使用

HJSON:可注释、更简洁易用的JSON用户接口及其在Python中的使用

JSON是现代常用的一种数据储存和表示格式,具有良好的阅读和编写体验。在Python语言中可以和字典、列表等数据格式完美兼容。

在现在的RESTful网络通信中,json被用来作为数据载体返回服务器的相应数据,相比于xml格式它具有更好的信噪比,一定程度上降低了网络的压力。

此外,JSON的另一个作用是作为配置文件使用,不过当使用json作为配置文件时,其有一个问题,就是json中不允许使用注释等额外的不符合json语法格式的内容(当然我们可以选择其他的如ini, yaml等格式来使用)。

HJSON是一种可以添加注释,而且更加简洁的JSON表示,支持在.NET、JAVA、Python、GO等语言中使用。Hjson, a user interface for JSON

1. 相比于JSON,Hjson有以下几个特点:

  1. 不会因为缺少逗号而出现语法错误,只要把每个键值对写在新的一行中即可。

    {
    first: 1
    second: 2
    }
    
  2. 可以添加注释:

    Hjson支持使用单行注释:#//, 和多行注释 /**/

    Python中的三引号的多行注释格式在Hjson中用来表示多行字符串。

    {
    # hash style comments
    # (because it's just one character)
    
    // line style comments
    // (because it's like C/JavaScript/...)
    
    /* block style comments because
       it allows you to comment out a block */
    
    # Everything you do in comments,
    # stays in comments ;-}
    }
    
  3. 对象的key可以不使用双引号来指定,编写时更加方便。

    {
    # specify rate in requests/second
    rate: 1000
    }
    
  4. 对象的value如果是单行的字符串,也可以不添加引号

    {
    JSON: "a string"
    
    Hjson: a string
    
    # notice, no escape necessary:
    RegEx: \s+
    }
    
  5. 可以书写多行字符串,方便阅读,使用三引号来表示:

    {
    md:
      '''
      First line.
      Second line.
        This line is indented by two spaces.
      '''
    }
    
  6. 标点符号,空格和退格符:

    JSON 和 Hjson 使用字符{}[],:作为标点符号来定义数据的结构。

    标点符号和空格不能用在无引号的键中,也不能用作无引号字符串的第一个字符。在这种情况下,我们就需要使用引号来表示含有标点符号的字符串。

    反斜杠只用作引号字符串中的转义字符。

    {
    "key name": "{ sample }"
    "{}": " spaces at the start/end "
    this: is OK though: {}[],:
    }
    

2. 在Python中使用Hjson:

Hjson为Python 2.5+ 和Python3.3+ 版本提供了支持,使用pip install hjson即可安装使用。

安装后不仅可以作为Python第三方库使用,它还提供了在命令行中使用的hjson命令:

Usage:
  hjson [options]
  hjson [options] <input>
  hjson (-h | --help)
  hjson (-V | --version)

Options:
  -h --help     Show this screen.
  -j            Output as formatted JSON.
  -c            Output as JSON.
  -V --version  Show version.

使用时可以将字符串格式化为hjson或对内容进行格式校验: echo '{"json":"obj"}' | hjson

在Python中使用时和json库的操作类似,非常的简单:

首先导入hjson库:import hjson

  1. 读取字符串hjson:

    text = """{
    foo: a
    bar: 1
    }"""
    
    h = hjson.loads(text)
    print(h)  # OrderedDict([('foo', 'a'), ('bar', 1)])
    

    如果想读取hjson文件内容可以使用 hjson.load()方法。

  2. 保存数据为hjson:

    hjson.dumps({'foo': 'text', 'bar': (1, 2)})
    

    执行后可将Python对象内容保存为:

    {
    foo: text
    bar:
    [
      1
      2
    ]
    }
    

    如果想将Python对象以Hjson格式保存在文件中可以使用 hjson.dump() 方法。

  3. 将hjson数据内容编码为JSON:

    hjson也可以去除掉hjson的特性将数据保存在为JSON格式:

    hjson.dumpsJSON(['foo', {'bar': ('baz', None, 1.0, 2)}])
    # '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    

    将其保存在JSON文件中则可以使用 hjson.dumpJSON() 方法。

更多hjson库的API可以参考:https://hjson.github.io/hjson-py/ 。

你可能感兴趣的:(python,其他,json,python,开发语言)