gais_json_convertor

Convertor for GAIS format and JSON format.


Keywords
GAIS
License
Other
Install
pip install gais_json_convertor==0.0.2

Documentation

GAIS JSON Convertor

GAIS 格式和 JSON 格式互相轉換的 convertor.

資料格式說明

GAIS format

@ 開頭, : 結尾作為欄位名稱,: 以後的部分是欄位的內容,範例:

# title 為欄位名稱, : 以後的部分是欄位內容
@title:外出小心 今起3天高屏紅害

JSON format

JSON 是一個輕量級、易於閱讀的資料交換格式。

安裝

pip3 install gais_json_convertor

Usage

GAIS to JSON

from gais_json_convertor import Convertor

rec_beg = "@GAIS:"
spec_fields = ["title", "time", "url", "body", "location.lat", "location.lng"]
records = [
    "@GAIS:", 
    "@title:來台南只知道牛肉湯?6大比秘境更吸引人的景點祭典", 
    "@time:2018/04/19 12:00", 
    "@url:https://bit.ly/2qJxkyQ", 
    "@body:台南,是不少人心中的美食之都,小巷子裡總是隱藏著各式各樣的美食等你去發掘", 
    "其中又以牛肉湯最為有名,吸引無數的外地人慕名而來。", 
    "但撇開台南有什麼美食好吃,說到不能錯過的景點就顯得相對較少", 
    "@LINE:abcd1234",
    "@loaction.lat:123", 
    "@location.lng:456"
]

try:
    data = convertor.gais2json(records, rec_beg, spec_fields)
    print(data)
except ValueError as err:
    print('ValueError: %s' % err)

Output:

{
    "body": "台南,是不少人心中的美食之都,小巷子裡總是隱藏著各式各樣的美食等你去發掘 其中又以牛肉湯最為有名,吸引無數的外地人慕名而來。 但撇開台南有什麼美食好吃,說到不能錯過的景點就顯得相對較少 @LINE:abcd1234", 
    "time": "2018/04/19 12:00", 
    "url": "https://bit.ly/2qJxkyQ", 
    "title": "來台南只知道牛肉湯?6大比秘境更吸引人的景點祭典", "location"': {
        "lat": 123, 
        "lng": 456
    }
}

convertor.gais2json(records, rec_beg)

records 是一個陣列,其中每一個陣列元素是一組欄位名稱和內容,如果陣列元素不包含欄位名稱,則會將此內容視為上一個欄位的內容,如上面的範例: records[5]records[6] 都會視為 body 的內容。
rec_beg 是 record begin pattern, 用來判斷每筆資料的開始。
spec_fields 代表指定欄位,預設是 None。如果有指定欄位並且欄位名稱不在指定的欄位中,則會視為上一個欄位的內容,如上面範例: records[7] 的欄位名稱為 LINE,不在指定欄位 spec_fields 中,所以會視為 body 的內容。

當欄位名稱包含 . 時,會視為巢狀的 JSON object, 最多只能包含兩層,例如:

@data.body:...                  => {"data": {"body": "..."}}
@data.location.lat:123          => {"data": {"location": {"lat": 123}}}
@data.info.location.lat:123     => ValueError

JSON to GAIS

from gais_json_convertor import Convertor

records = {
    "title": "來台南只知道牛肉湯?6大比秘境更吸引人的景點祭典",
    "time": "2018/04/19 12:00",
    "url": "https://bit.ly/2qJxkyQ",
    "imgs": ["img1", "img2", "img3"],
    "info": {
        "location": {
            "lat": 123,
            "lng": 456
        },
        "phone": "12345678"
    }
}

try:
    data = convertor.json2gais(records)
    print(data)
except ValueError as err:
    print('ValueError: %s' % err)

Output:

@GAIS:
@title:來台南只知道牛肉湯?6大比秘境更吸引人的景點祭典
@info.phone:12345678
@info.location.lng:456
@info.location.lat:123
@imgs:['img1', 'img2', 'img3']
@url:https://bit.ly/2qJxkyQ
@time:2018/04/19 12:00

convertor.json2gais(records)

records 是一個 object 或是 array of objects, 最多可以包含兩層巢狀結構,超過兩層會直接存為 JSON string, 例如:

{
    "data": {
        "info": {
            "location": {
                "lat": 123,
                "lng": 456
            }
        }
    }
}

會轉換為:

@data.info.location:{"lat": 123, "lng": 456}