【问题标题】:Removing unwanted characters, and writing from a JSON response删除不需要的字符,并从 JSON 响应中写入
【发布时间】:2020-08-07 15:45:46
【问题描述】:

所以,我正在尝试提取特定数据并将其写入文件,这个 JSON 响应在我想要的信息周围有奇怪的括号,需要被剥离,我不确定如何到达“想要的”输出”。

也许在 xls 文档中这样做会更好?最终目标是将此列表与另一个列表进行比较,以找出缺少哪些主机。

这是一个很长的回复,所以我只是抓住了一个sn-p。

JSON 响应

  [
  {
    "adapter_list_length": 3,
    "adapters": [
      "adapter1",
      "adapter2",
      "adapter3"
    ],
    "id": "",
    "labels": [
      "",
      ""
    ],
    "specific_data.data.hostname": [
      "HOSTNAME1"
    ],
    "specific_data.data.last_seen": "",
    "specific_data.data.network_interfaces.ips": [
      "123.45.67.89"
    ],
    "specific_data.data.os.type": [
      ""
    ]
  },
  {
    "adapter_list_length": 3,
    "adapters": [
      "adapter1",
      "adapter2",
      "adapter3"
    ],
    "id": "",
    "labels": [
      "",
      ""
    ],
    "specific_data.data.hostname": [
      "HOSTNAME2"

我的测试作者:

names = [item['specific_data.data.hostname'] for item in data]

with open ('namelist.csv', mode='w') as csv_file:
        csv_writer = csv.writer(csv_file, delimiter='\n', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        csv_writer.writerow(names)

当前输出:

['HOSTNAME1'] 
['HOSTNAME2']

期望的输出:

Hostnames:     IPaddress:
HOSTNAME1      123.45.67.89 
HOSTNAME2      123.456.78.9 
....            ....
...             ....

【问题讨论】:

    标签: python json api csv python-requests


    【解决方案1】:

    你可以这样做:

    import csv
    data = [{'adapter_list_length': 3, 'adapters': ['adapter1', 'adapter2', 'adapter3'], 
    'id': '', 'labels': ['', ''], 'specific_data.data.hostname': ['HOSTNAME1'], 
    'specific_data.data.last_seen': '', 'specific_data.data.network_interfaces.ips': 
    ['123.45.67.89'], 'specific_data.data.os.type': ['']}, {'adapter_list_length': 3, 
    'adapters': ['adapter1', 'adapter2', 'adapter3'], 'id': '', 'labels': ['', ''], 
    'specific_data.data.hostname': ['HOSTNAME2'],'specific_data.data.last_seen': '', 
    'specific_data.data.network_interfaces.ips': ['123.45.67.80'], 
    'specific_data.data.os.type': ['']}]    
    names = [item['specific_data.data.hostname'][0] for item in data]
    ips = [item['specific_data.data.network_interfaces.ips'][0] for item in data]
    
    dets = list(zip(names,ips))
    print('Hostnames:','\t','IPaddress:')
    for i,j in dets:
        print(i,'\t',j)
    
    fields = ['Hostnames:', 'IPaddress:']      
    rows = [list(x) for x in dets]     
    filename = "dumb.csv"
    with open(filename, 'w') as csvfile:   
        csvwriter = csv.writer(csvfile)  
        csvwriter.writerow(fields)   
        csvwriter.writerows(rows) 
    

    【讨论】:

    • 很遗憾不能使用 pandas
    • 你可以把它打印出来。我已经更新了我的答案来做到这一点。
    • 需要写入 CSV 中的两个单独列。
    • 你现在应该可以应付了
    • 由于某种原因,主机名最终停止写全名,只写第一个字母。
    猜你喜欢
    • 2013-04-17
    • 2015-11-05
    • 2014-09-05
    • 2021-06-27
    • 2022-01-12
    • 2017-06-04
    • 2021-11-16
    • 2018-03-24
    相关资源
    最近更新 更多