cari

Rumah  >  Soal Jawab  >  teks badan

python - 使用json.loads,key不带引号,且value中可能含有“:”,如何最好地处理?

例如:

'''{
    colorSize: [{
        "Color": "超窄边IPS",
        "SkuId": 1365289,
        "Size": "27英寸"
    }, {
        "Color": "21:9超宽IPS曲面",
        "SkuId": 1742140,
        "Size": "29英寸"
    }, {
        "Color": "17英寸(TN,5:4方屏)",
        "SkuId": 1032147,
        "Size": "17英寸"
    }],
    warestatus: 1,
    shangjiazizhi: false
}'''

为了给key加双引号,必需先选中之
因为内容带有“:”,

  1. (\w+):,误处理"21:9超宽IPS曲面"

  2. [{,]\s*(\w+):,误处理"17英寸(TN,5:4方屏)"

有什么比较好的处理方法呢?

怪我咯怪我咯2845 hari yang lalu851

membalas semua(4)saya akan balas

  • PHP中文网

    PHP中文网2017-04-18 09:18:41

    Boleh digunakandemjson https://github.com/dmeranda/d...

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:18:41

    Dua penyelesaian
    Seorang menggunakan demjson seperti yang @raidou katakan
    Seorang lagi menggunakan pyexecjs
    Muat naik kod

    import execjs
    import demjson
    
    str = '''
    {
        colorSize: [{
            "Color": "超窄边IPS",
            "SkuId": 1365289,
            "Size": "27英寸"
        }, {
            "Color": "21:9超宽IPS曲面",
            "SkuId": 1742140,
            "Size": "29英寸"
        }, {
            "Color": "17英寸(TN,5:4方屏)",
            "SkuId": 1032147,
            "Size": "17英寸"
        }],
        warestatus: 1,
        shangjiazizhi: false
    }
    '''
    print demjson.decode(str)
    print execjs.eval(str)

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:18:41

    Versi mudah alih tidak dapat melihat tajuk penuh, bolehkah anda membalas?
    Versi mudah alih belum dapat membalas ulasan lagi, saya jengkel
    Kemas kini supaya sepadan dengan ruang di hadapan

    \s([^"]+):

    atau padankan permulaan baris

    ^([^"]+):

    balas
    0
  • PHPz

    PHPz2017-04-18 09:18:41

    Saya menyelesaikannya sendiri, biar saya ringkaskan:
    Perkara yang paling penting ialah nombor : gila ini mesti muncul dalam berpasangan "

    Oleh kerana petikan berganda sentiasa muncul secara berpasangan dan tidak bersilang
    Gunakan re.sub untuk menapis pasangan petikan berganda, dan kemudian berikan hasil yang ditapis kepada fungsi untuk diproses: gantikan titik bertindih antara petikan berganda dengan aksara khas , supaya Untuk kemudahan penerangan, saya panggil watak ini

    Ganti hasil tanpa kolon kandungan dengan pemprosesan biasa sebelumnya dengan kolon

    Kemudian muncul soalan baharu Selepas menambah petikan berganda pada kekunci, jika saya mahu menggantikan kembali ke :, apakah watak istimewa yang harus saya pilih untuk ?

    balas
    0
  • Batalbalas