Mam plik JSON, który przeczytam i oparte na szczegółach XYZ utworzy raport Excel. Poniżej znajduje się przykładowy plik JSON, którego użyję do wyodrębniania informacji, które posiada dane w formacie wielu słowników.

Teraz moim wymogiem jest pobieranie wartości XYZ jeden po drugim i na podstawie go przy użyciu niektórych pola Utwórz raport. Poniżej znajduje się mały fragment kodu, w którym czytam plik i na podstawie wyników z kluczem. Dane, do których odwołuję się po przeczytaniu go z pliku.

def pop_ws(dictionary,ws):
  r=1
  count=1
  for k,v in dictionary.items():
   offs=len(v['current'])
   ws.cell(row=r+1,column=1).value = k
   ws.cell(row=r+1,column=4).value = v['abc']
   ws.cell(row=r+1,column=5).value = v['def']
   wrk=read_cves(k)
   count +=1
   if wrk !='SAT':
      ws.cell(row=r+1,column=7).value =k
      ws.cell(row=r+1,column=8).value =tmp1['public_date']
      if 'cvss' in list(tmp1.keys()):
      .
      .
      .
      

def read_f(data):
 with open(dat.json) as f:
    wrk = f.read()

Jestem bardzo utknięty na temat kodu w def read_f(data):, tak że odczytuje dat.json i na podstawie wartości, tj. data, pobierają szczegóły zdefiniowane jak w strukturze słownika jeden po drugim dla wszystkich wymaganych Dane i wypełnić zgodnie z definicją pop_ws w moim kodzie.

data w def read_f(data): będzie wartością dynamiczną i na podstawie niego trzeba filtrować słownik, który ma wartość (przechowywane w data) zdefiniowane w stosunku do klucza, a następnie wyodrębnij cały słownik do inny plik JSON.

Każda sugestia zostanie doceniona.

1
Rajesh 14 kwiecień 2021, 21:49

2 odpowiedzi

Najlepsza odpowiedź

Użyj pakietu JSON, aby załadować dane dotyczące formatu JSON, takie jak poniżej:

# Python program to read
# json file


import json

# Opening JSON file
f = open('data.json',)

# returns JSON object as
# a dictionary
data = json.load(f)

# Iterating through the json
# list
for i in data['emp_details']:
    print(i)

# Closing file
f.close()

Dostałem to z tego Link, teraz możesz uzyskać dykt plik.

Następnie możesz po prostu filtrować dykt o określonej wartości takiej jak poniżej. Powinieneś użyć wbudowanej funkcji filtra (), z funkcją zwracającą true, jeśli słownik zawiera jedną z wartości.

def filter_func(dic, filterdic):
    for k,v in filterdic.items():
        if k == 'items':
            if any(elemv in dic[k] for elemv in v):
                return True
        elif v == dic[k]:
            return True
    return False

def filter_cards(deck, filterdic):
    return list(filter(lambda dic, filterdic=filterdic: filter_func(dic, filterdic) , deck))

Powinieneś użyć słownika jako drugiego elementu.

filter_cards(deck, {'CVE': 'moderate'})

Mam nadzieję, że może to być pomocne dla twojej sytuacji.

Dzięki.

0
James Lin 15 kwiecień 2021, 13:05

Po otrzymaniu obiektu JSON możesz uzyskać dostęp do każdej wartości za pomocą klucza taka:

print(json_obj["key"]) #prints the json value for that key

W Twoim przypadku

print(wrk["CVE"]) # prints CVE-2020-25624
0
Mainly Karma 14 kwiecień 2021, 18:58