Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
75 views
in Technique[技术] by (71.8m points)

python - Ignoring specific json files where key [Behavior] is not present

I am working with a huge dataset of Cuckoo sandbox datset having several .JSON files, I have to create a CSV file having API stats in the behavior section of JSOn files, but if a json file doesn't have Specific file it the code stops executing.

here is my program

   import pandas as pd
# As of Pandas 1.01, json_normalize as pandas.io.json.json_normalize is deprecated and is now exposed in the top-level namespace.
from pandas.io.json import json_normalize
from pathlib import Path
import json
import os

bkey=[]
infoList=[]
signaturesList=[]
fileOpsList=[]
irmaList=[]
suricataList=[]
virustotalList=[]
sysmonList=[]
resubmitList=[]
snortList=[]
behaviorList=[]
memoryList=[]
debugList=[]
#mispList=[]
targetList=[]
networkList=[]
metadataList=[]
list2=[]

#print(pathList)
path_to_json = 'C:/Users/skdk/Desktop/Ransomware-API/Benign/'

for file_name in [file for file in os.listdir(path_to_json) if file.endswith('.json')]:
    with open(path_to_json + file_name, encoding ='utf-8') as json_file:
        data = json.load(json_file) 
        #print(data)
        behaviorList.append(str(data['behavior']))
    
# for path in path_to_json:
#     p = Path(path)
#     #print(p)
#     # read json50
#     with p.open('r', encoding='utf-8') as f:
#         data = json.loads(f.read())
#         #print(p)
  #  behaviorList.append(str(data['behavior'])) 


apiStatsList = []
for behavior in behaviorList:
    for key,value in eval(behavior)['apistats'].items():
        fileName = str(pathList[behaviorList.index(behavior)][:pathList[behaviorList.index(behavior)].index('.json')])+"/" + str(key)
        list2.append(fileName)
        apiStatsList.append(value)
    print(fileName)

dataset2= {}
for key,value in apiStatsList[0].items():
    dataset2[key] = [value]

count = 1
for apiStat in apiStatsList[1:]:
    for key,value in apiStat.items():
        if(key in dataset2):
            while(len(dataset2[key])!=count):
                dataset2[key].append(0)
            dataset2[key].append(apiStat[key])
        else:
            tempList=[0]*(count)
            tempList.append(value)
            dataset2[key] = tempList
    count=count+1

                
dataset2['Directory']=list2
df2 = pd.DataFrame.from_dict(dataset2, orient='index')
df2 = df2.transpose()
df2 = df2.fillna(0)
df2=df2.set_index('Directory')
#df2
df2.to_csv('Benign.csv')

I am getting a following error

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-16-fc19a9a3c2d1> in <module>
     34         data = json.load(json_file)
     35         #print(data)
---> 36         behaviorList.append(str(data['behavior']))
     37 
     38 # for path in path_to_json:

KeyError: 'behavior'

Any Help is appreciated.

question from:https://stackoverflow.com/questions/65931710/ignoring-specific-json-files-where-key-behavior-is-not-present

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Put it inside

        try:
             'your code'
        except KeyError:
            'your code in case the json doesn't have behaviour. It could skip to the next file for example.'
```

It would catch any or specified error. And since you've said you are interested only in files with behaviour key, I think it should help you. 

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...