Python - Сохранение части ответа JSON в виде строки с разделителями-запятыми - PullRequest
0 голосов
/ 13 июня 2018

У меня есть строка ответа JSON, которая содержит результаты сканирования с нескольких антивирусных сайтов.Это выглядит примерно так -

"scans": {
  "Bkav": {
    "detected": false,
    "version": "1.3.0.9466",
    "result": null,
    "update": "20180609"
  },
  "MicroWorld-eScan": {
    "detected": true,
    "version": "14.0.297.0",
    "result": "W97M.Downloader.AIU",
    "update": "20180611"
  },
  "CMC": {
    "detected": false,
    "version": "1.1.0.977",
    "result": null,
    "update": "20180610"
  },
  "CAT-Quickheal": {
    "detected": true,
    "version": "14.00",
    "result": "X97M.Dropper.PD",
    "update": "20180611"
  },
  "McAfee": {
    "detected": true,
    "version": "6.0.6.653",
    "result": "X97M/Downloader.asi",
    "update": "20180611"
  },
},
"tags": {
...
},

Как извлечь все непустые результаты (все отличные от нуля) из тега scans в этом файле JSON и сохранить его в одну запятуюстрока в столбце таблицы моей базы данных?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Это ответ действительно JSON?как я знаю, JSON не может быть разделен точкой с запятой.Это должно быть, как показано ниже.

"scans": {
  "Bkav": {
    "detected": false,
    "version": "1.3.0.9466",
    "result": null,
    "update": "20180609"
  },
  "MicroWorld-eScan": {
    "detected": true,
    "version": "14.0.297.0",
    "result": "W97M.Downloader.AIU",
    "update": "20180611"
  },
  "CMC": {
    "detected": false,
    "version": "1.1.0.977",
    "result": null,
    "update": "20180610"
  },
  "CAT-Quickheal": {
    "detected": true,
    "version": "14.00",
    "result": "X97M.Dropper.PD",
    "update": "20180611"
  },
  "McAfee": {
    "detected": true,
    "version": "6.0.6.653",
    "result": "X97M/Downloader.asi",
    "update": "20180611"
  },
},
"tags": {
...
},

После загрузки JSON в python dict вы можете сделать что-то вроде ниже.

import json

jsonDict = json.loads(yourJSON)

results = []
for scanElement in jsonDict['scans']:
    if scanElement['result'] != None:
        results.append(scanElement['result'])

##save the results to your DB
0 голосов
/ 13 июня 2018

Возможно, есть более эффективный способ, но я думаю, что он должен дать вам строковое значение через запятую, которое вы ищете:

import json

scans = response_data.get('scans', [])
scan_results = (scans[key]['result'] for key in scans.keys())
csv = ', '.join((result for result in scan_results if result is not None))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...