Как проанализировать файл JSON и собрать данные и сохранить в Dataframe? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть файл JSON, его формат: массив объектов. Каждый объект представляет один класс. Каждый объект JSON имеет ключ «method», представляющий все методы анализируемого класса. Формат прост, как мы видим в следующем примере Это не полный файл JSON, это блок для одного класса

[
  {
"methods": [
  {
    "parametersTypes": [
      "String"
    ],
    "metricsValues": {
      "ParameterCount": 1.0,
      "CyclomaticComplexity": 1.0,
      "LocalityRatio": 1.0,
      "MethodLinesOfCode": 2.0,
      "MaxCallChain": 1.0
    },
    "fullyQualifiedName": "Smiley.Smiley",
    "smells": []
  },
  {
    "parametersTypes": [
      "String"
    ],
    "metricsValues": {
      "ParameterCount": 1.0,
      "CyclomaticComplexity": 8.0,
      "LocalityRatio": null,
      "MethodLinesOfCode": 23.0,
      "MaxCallChain": 0.0
    },
    "fullyQualifiedName": "Smiley.checkSmiley",
    "smells": [
      {
        "name": "LazyClass",
         "reason": null,
         "startingLine": 3,
         "endingLine": 36
      }
    ]
  }
],
"metricsValues": {
  "PublicFieldCount": 0.0,
  "TightClassCohesion": 0.0,
  "IsAbstract": 0.0,
  "ClassLinesOfCode": 27.0,
  "OverrideRatio": 0.037037037037037035
},
"fullyQualifiedName": "Smiley",
"smells": [
  {
    "name": "LazyClass",
    "reason": null,
    "startingLine": 10,
    "endingLine": 70
  }
]
  }
]

Мне нужно собрать все запахи в файле JSON, и я положу их в DataFrame Я пробую это для одного класса Это мой код

import json  
from pprint import pprint

with open('Testan.json') as f:
 data = json.load(f)
 pprint(data)

for datum in data[0]["methods"]:
  print(datum['smells'])

И это результат:

 []
 [{'name': 'LazyClass', 'reason': 'null', 'startingLine': 3, 'endingLine': 36}]
 [{'name': 'LazyClass', 'reason': 'null', 'startingLine': 10, 'endingLine': 70}]

Сначала мне нужно из этого списка только имена (LazyClass), а затем мне нужно собрать данные из всех классов JSON File, а не из первого класса.

Любая помощь, пожалуйста, и заранее спасибо!

1 Ответ

0 голосов
/ 14 мая 2019

С помощью приведенного ниже кода вы можете добавить все запахи из всех классов, содержащихся в списке your_classes. Все данные хранятся в фрейме df. Вы можете получить доступ к именам через df['name']

your_classes = ['Testan.json','other_names.json']
your_smells = []
for filename in your_classes:
    with open(filename) as f:
        data = json.load(f)

    for datum in data[0]["methods"]:
        your_smells.append(datum['smells'])

import pandas as pd
df = pd.DataFrame(your_smells) # Dataframe with all the smells
print(list(df['name'])) # The list of all names from all classes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...