python - 使用json.loads,key不带引号,且value中可能含有“:”,如何最好地处理?
怪我咯
怪我咯 2017-04-18 09:16:41
0
4
795

例如:

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

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

怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(4)
洪涛

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

Peter_Zhu

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)
Peter_Zhu

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

^([^"]+):
PHPzhong

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  ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!