如何遍历json对象以获取特定字段的所有键值对?

我有这个json响应

{   "assets": [
    {
      "id": 518447,"created_at": "2019-09-10T10:13:38Z","priority": 10,"operating_system": "microsoft - Windows - Windows Server 2008 R2,Enterprise Edition - SP1","notes": null,"last_booted_at": null,"primary_locator": "external_id","locator": "1112359","vulnerabilities_count": 22,"status": "active","last_seen_time": "2019-09-08T16:00:17Z","network_ports": [
        {
          "id": 33550493,"port_number": 180,"extra_info": "","hostname": null,"name": "HTTP","ostype": "","product": "JBoss EAP","protocol": "tcp","state": "open","version": "4.2.3.GA"
        },{
          "id": 33550494,"port_number": 100,"name": "snMP","product": null,"protocol": "udp","version": null
        },],"tags": [
        "Windows Server","DO - DO SPG BOM"
      ],"owner": null,"urls": {
        "vulnerabilities": ""
      },"ip_address": "10.10.10.1","database": null,"fqdn": null,"netbios": null,"application": null,"file": null,"mac_address": null,"ec2": null,"url": null,"external_id": "1112359","ipv6": null,"asset_groups": [
        {
          "id": 4,"name": "0 Global - All"
        },{
          "id": 204,"name": "DO - All"
        },{
          "id": 417,"name": "Do - All"
        }
      ]
    }

我已经尝试了通过第一个索引[0]的方法,但是我知道有更好的方法可以解决此问题

 import request
import json

url = 'https://thisismyurl.com/assets/'
token = 'blahblah'
headers = {'X-Risk-Token': token,'accept': 'application/json'}
response = requests.get(url,headers=headers)
print(response.status_code)
json_format = json.loads(response.text)
for a in  json_format['assets']:
     for key,value in json_format:
print('operating_system : ' + json_format['assets'][0]['operating_system'] + ',' + 'ip_address : ' + json_format['assets'][0]['ip_address'] + 'tags : ' + json_format['assets'][0]['tags'])

但是我的方式没有产生我想要的预期输出。

我只想遍历整个json,查找每次出现的操作系统,IP地址和标签

我想要的期望输出是:

"operating_system": "microsoft - Windows - Windows Server 2008 R2,"tags":  "Windows Server" "DO - DO SPG BOM","ip_address": "10.10.10.1".

我该如何使用Python?

a1300236594 回答:如何遍历json对象以获取特定字段的所有键值对?

您的代码有多个部分可能是导致错误的原因。我写了一些给出适当结果的代码,唯一的区别是我正在从文件中读取JSON。

代码:

import json
import csv

with open('../resources/web_json_test.json','r') as file_1:
    json_res: dict = json.loads(file_1.read())

with open('../out/json_to_csv_out.csv','w',newline='') as file_1:
    csv_writer = csv.DictWriter(file_1,fieldnames=['operating_system','tags','ip_address'])
    csv_writer.writeheader()
    for curr in json_res['assets']:
        csv_writer.writerow(
            {'operating_system': curr["operating_system"],'tags': curr["tags"],'ip_address': curr["ip_address"]})

输出:

  

操作系统,标签,IP地址
  “ Microsoft-Windows-Windows Server 2008 R2,企业版-SP1”,“ ['Windows Server','DO-DO SPG BOM']”,10.10.10.1

本文链接:https://www.f2er.com/3127109.html

大家都在问