第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用 Lark 解析無效的 JSON?

如何使用 Lark 解析無效的 JSON?

慕工程0101907 2021-10-12 17:23:22
讓我們從考慮使用 lark 的簡單 json 解析器開始:import sysfrom lark import Lark, Transformer, v_argsjson_grammar = r"""    ?start: value    ?value: object          | array          | string          | SIGNED_NUMBER      -> number          | "true"             -> true          | "false"            -> false          | "null"             -> null    array  : "[" [value ("," value)*] "]"    object : "{" [pair ("," pair)*] "}"    pair   : string ":" value    string : ESCAPED_STRING    %import common.ESCAPED_STRING    %import common.SIGNED_NUMBER    %import common.WS    %ignore WS"""class TreeToJson(Transformer):    @v_args(inline=True)    def string(self, s):        return s[1:-1].replace('\\"', '"')    array = list    pair = tuple    object = dict    number = v_args(inline=True)(float)    def null(self, _): return None    def true(self, _): return True    def false(self, _): return Falseif __name__ == '__main__':    json_parser = Lark(json_grammar, parser='lalr', lexer='standard', transformer=TreeToJson())    parse = json_parser.parse    dct = parse('''        {            "empty_object" : {},            "empty_array"  : [],            "booleans"     : { "YES" : true, "NO" : false },            "numbers"      : [ 0, 1, -2, 3.3, 4.4e5, 6.6e-7 ],            "strings"      : [ "This", [ "And" , "That", "And a \\"b" ] ],            "nothing"      : null        }    ''')    print(dct)上面的例子來自官方示例網(wǎng)站,它能夠解析有效的json。到目前為止一切順利,但我的問題是如何擴(kuò)展此語法和轉(zhuǎn)換器,以便它還能夠解析無效的 json 字符串,例如以下字符串:dct = parse('''    [        // Item1        { "key1": "value1" },        // Item2        { "key2": "value2", "key3": ["a","b",] },        // Item3        { "key4": [{"key5":"value5"},] },    ]''')我的主要目標(biāo)是能夠解析 SublimeText 資產(chǎn)(它是 json 的超集),STsublime_api.decode_value在幕后使用……但是這個(gè)函數(shù)是閉源的,所以我不能使用它。此外,我沒有找到任何開箱即用的 pypi 庫來處理這種類型的數(shù)據(jù),所以我決定最好的機(jī)會(huì)是嘗試編寫我自己的自定義“無效 json”解析器。
查看完整描述

2 回答

?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊

該demjson庫非常擅長解析有問題的 json:


import demjson


str = '''

    [

        // Item1

        { "key1": "value1" },

        // Item2

        { "key2": "value2", "key3": ["a","b",] },

        // Item3

        { "key4": [{"key5":"value5"},] },

    ]

'''


print(demjson.decode(str))

結(jié)果:


[{'key1': 'value1'}, {'key2': 'value2', 'key3': ['a', 'b']}, {'key4': [{'key5': 'value5'}]}]

查看完整回答
反對 回復(fù) 2021-10-12
  • 2 回答
  • 0 關(guān)注
  • 284 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號