参考链接: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
默认情况下:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True | true |
False | false |
None | null |
JSONEncoder
默认情况下:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True | true |
False | false |
None | null |
文档信息
- 本文作者:weownthenight
- 本文链接:https://weownthenight.github.io/2021/10/06/JSON%E7%94%A8%E6%B3%95/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)