recherche

Maison  >  Questions et réponses  >  le corps du texte

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方屏)"

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

怪我咯怪我咯2833 Il y a quelques jours847

répondre à tous(4)je répondrai

  • PHP中文网

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

    Peut être utilisédemjson https://github.com/dmeranda/d...

    répondre
    0
  • 天蓬老师

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

    Deux solutions
    L'une utilise demjson comme @raidou l'a dit
    L'autre utilise pyexecjs
    Téléchargez le code

    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)

    répondre
    0
  • 天蓬老师

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

    La version mobile ne voit pas le titre complet, pouvez-vous répondre ?
    La version mobile ne peut pas encore répondre aux commentaires, je suis ennuyé
    Mettez-la à jour pour qu'elle corresponde à un espace devant

    \s([^"]+):

    ou faire correspondre un début de ligne

    ^([^"]+):

    répondre
    0
  • PHPz

    PHPz2017-04-18 09:18:41

    Je l'ai résolu moi-même, laissez-moi le dire simplement :
    Le plus important est que ces nombres : fous doivent apparaître par paires "

    Parce que les guillemets doubles apparaissent toujours par paires et ne se croisent pas
    Utilisez re.sub pour filtrer les paires de guillemets doubles, puis donnez les résultats filtrés à la fonction pour traitement : remplacez les deux points entre les guillemets doubles par des caractères spéciaux , afin de faciliter la description, j'appelle ce personnage

    Remplacez le résultat sans contenu deux-points par le traitement régulier précédent avec deux-points

    Ensuite, voici une nouvelle question. Après avoir ajouté des guillemets doubles à la clé, si je veux remplacer par :, quel caractère spécial dois-je choisir pour  ?

    répondre
    0
  • Annulerrépondre