2016-04-08 15 views
0

Başka sözlükle bir json dosyasında aşağıdaki json sözlüğe tüm tekrarlarını değiştirmek çalışıyorum:Bir json sözlüğünün tüm oluşumlarını Python kullanarak json dosyasında nasıl bulunur ve değiştirilir?

sözlüğe

{ 
    "FileNameModifierItemPosition": 1, 
    "FileNameModifierItemType": 0, 
    "FileNameModifierParameters": { 
            "DateParameters": { 
                 "DT": 0, 
                 "UFD": true, 
                 "DF": "yyyyMMdd" 
                }, 
            "FqlParameters": { 
                 "FExpression": null 
                } 
           }, 
    "IE": true, 
    "$": "PDMFN 
} 

fakat değiştirilmesi

{ 
    "AP": { 
      "UFD": xxx, 
      "DF": "xxxxxx" 
     }, 
    "IE": xxxx, 
    "$": "PDAE" 
} 

sözlük değiştirilecek Değiştirilecek sözlüğü ayrıştırmak ve IE, UFD, DF değerlerini ayıklamak ve ikinci sözlüğün yazışma alanlarına atamak istiyorum. Python'da düzenli ifadeleri kullanarak bunu nasıl yapabilirim?

+0

ilk sözlüğü zaten isteyen alanlar için geçerli veriler içeriyor. Onları 'çıkarmak' istediğin zaman ne demek istediğini anlamıyorum. Değerleri yeni sözlükteki alanlara atayabilirsiniz, d2 ['UF'] = d1 ['UF'] '. Regex nereye gelir? –

+1

Örneğinizden, birinci ve ikinci sözlük arasındaki karşılık gelen alanlar için net değil. "FqlParameters", "DateParameters" ve "FileNameModifierItemPosition" vb. Gibi yenilikler yeni mi? – Quinn

+0

böylece ilk sözlük derin bir yuvalanmış bir jsonun içine yerleştirilmiş, diğer sözlükle dize eşleşmesi kullanılarak ilk sözlüğün tüm oluşumlarını değiştirebilmeyi istiyorum. – AnkitSablok

cevap

1

DÜZENLEME bu yaklaşımı deneyin:

import re 
# pattern to get values of UFD, DF, and IE from dict1 
p1 = '(?s){\s+"AP":\s+{\s+"UFD":\s+(.*?),\s+"DF":\s+"(.*?)"\s+},\s+"IE":\s+(.*?),\s+"\$":\s+"PDAE"\s+}' 
# pattern to match dict2 
p2 = '({[\s\S]+?"UFD":\s+)(.*?)(,\s+"DF":\s+")(.*?)("[\s\S]+?"IE":\s+)(.*?)(,[\s\S]+?})' 

dict1 = """ 
{ 
    "AP": { 
      "UFD": xxx, 
      "DF": "xxxxxx" 
     }, 
    "IE": xxxx, 
    "$": "PDAE" 
} 
""" 

dict2 = """ 
{ 
    "FileNameModifierItemPosition": 1, 
    "FileNameModifierItemType": 0, 
    "FileNameModifierParameters": { 
            "DateParameters": { 
                 "DT": 0, 
                 "UFD": true, 
                 "DF": "yyyyMMdd" 
                }, 
            "FqlParameters": { 
                 "FExpression": null 
                } 
           }, 
    "IE": true, 
    "$": "PDMFN 
} 
""" 
# retrieve values from dict1 
dict1_values = re.findall(p1, dict1)[0] 
# replace dict2 with corressponding values from dict1 
print re.sub(p2, r'\1%s\3%s\5%s\7' % dict1_values, dict2) 

Çıktı:

{ 
    "FileNameModifierItemPosition": 1, 
    "FileNameModifierItemType": 0, 
    "FileNameModifierParameters": { 
            "DateParameters": { 
                 "DT": 0, 
                 "UFD": xxx, 
                 "DF": "xxxxxx" 
                }, 
            "FqlParameters": { 
                 "FExpression": null 
                } 
           }, 
    "IE": xxxx, 
    "$": "PDMFN 
} 
+0

yapabilirim xxxx gibi münferit anahtar değerlerinin değerlerini hesaba katmaz. – AnkitSablok

+0

Aradığınız şeyin bu olduğundan emin değil misiniz? [Regex demosu] (https://regex101.com/r/hO2tK5/3) – Quinn

+0

dostum, kurtarıcımsın, böyle iyi bir cevap için çok teşekkürler, ancak farklı olayların nasıl güncelleneceğine dair biraz farklı bir yaklaşım kullandım. farklı değerler ile desen. Yine de teşekkürler – AnkitSablok

İlgili konular