JSON用法

2021/10/06 NLP 共 1500 字,约 5 分钟

参考链接:json

Introducing JSON

为什么使用json文件读写?

无论是比赛数据集还是公开的论文数据集,NLP的数据集通常都是json文件,那么JSON究竟是什么呢?

JSON(JavaScript Object Notation)是一种数据交换语言,采用完全独立于语言的文本格式,但是也使用了类似C语言家族的习惯(包括C,C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

使用JSON语言可以很方便的把文本转换为编程语言中的数据结构。

数据结构

JSON本身有两种数据结构:

  • a collection of name/value pairs. 通常会被一些语言认为是object, record, struct, dictionary, hash table, keyed list or asscociative array. 可以看作是无序的集合。

    eg:(也是数据集中经常遇到的格式,在python中可以转换为字典来使用。

    {"sentence": ["油", "温", "计", "。"], "ner": [["DT", 1, 4]], "relation": [], "attribution": []}
    
  • An ordered list of values. In most languages, this is realized as an array, vector, list or sequence.

    eg:

    [1, 2, true, 's', "Hello", [1, 2]]
    

    A value can be a string in double quotes, or a number, or true or false or null, or an object or an array. These structures ca be nested(嵌套)。

Python <—> JSON

Python中有json包,使用这个包中的方法可以实现json格式文件和Python数据结构的转换:

dump

将Python对象转换为JSON格式的stream写入文件:

json.dumps(doc, cls=NpEncoder)

```python
# override JSONEncoder, convert numpy to python
class NpEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.integer):
            return int(obj)
        elif isinstance(obj, np.floating):
            return float(obj)
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        else:
            return super(NpEncoder, self).default(obj)

load

dump的反面,将流转换为Python对象。比如:

gold_docs = [json.loads(line) for line in open(json_file)]

JSONDecoder

默认情况下:

PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
Truetrue
Falsefalse
Nonenull

JSONEncoder

默认情况下:

PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
Truetrue
Falsefalse
Nonenull

文档信息

Search

    Table of Contents