python - 使用pyjq解析多个json值,用逗号分隔

标签 python json csv

使用 pyjq 我能够解析 json 文件中的值。我需要对输出进行更多格式化,以便可以将其导出到 csv。

import json
import csv
import pyjq

emp_data = open('example.json', 'r')
emp_data_parsed = json.loads(emp_data.read())
emp = pyjq.all ('.base[].base[].uid, .base[].base[].name', emp_data_parsed)
print emp

我得到的输出

[u'2da21174-0af8-4b5b-b02e-2957a24d70e1', u'fcc5a2c8-3a78-4cc5-9fd3-e7bd59eb36ba', u'4ecf6450-7307-466c-bf19-663ba2fbaf69', None, u'Tommy', u'Sam',

预期输出如下,以便可以写入 csv 文件。

uid,name
'2da21174-0af8-4b5b-b02e-2957a24d70e1','None'
'fcc5a2c8-3a78-4cc5-9fd3-e7bd59eb36ba','Tommy'
'4ecf6450-7307-466c-bf19-663ba2fbaf69','Sam'

以下是sample.json文件

example.json
{
    "base": [
        { 
            "base": [
                {
                    "item-number": 1, 
                    "type": "access-item", 
                    "uid": "2da21174-0af8-4b5b-b02e-2957a24d70e1",  
                    "usage": { 
                        "last-date": {
                            "iso-8601": "2018-03-19T03:58-0500", 
                        }, 
                    }, 

                    "item-number": 2, 
                    "name": "Tommy",
                    "type": "access-item", 
                    "uid": "fcc5a2c8-3a78-4cc5-9fd3-e7bd59eb36ba", 

                    "item-number": 3, 
                    "name": "Sam",
                    "type": "access-item", 
                    "uid": "4ecf6450-7307-466c-bf19-663ba2fbaf69", 
                    "usage": { 
                        "last-date": {
                            "iso-8601": "2018-03-21T07:21-0500", 
                        }, 
                    },
                }
            ], 
        }
    ], 
}

我不确定除了 pyjq 之外,还有其他方法可以做到这一点。如果是这样,请告诉我。

最佳答案

Question: I need to format the output bit more so this can be exported to csv.

无法使用pyjp进行测试,从Project description猜测,尝试:

pyjq.all('.base[].base[] | {"uid": .uid, "item-number":.item-number}', emp_data_parsed)

像这样循环 JSON:

for rec in emp_data_parsed['base'][0]['base']:
    print("{}".format(rec))

Output:

{'uid': '2da21174-0af8-4b5b-b02e-2957a24d70e1', 'item-number': 1}, ... (omitted for brevity)
{'uid': 'fcc5a2c8-3a78-4cc5-9fd3-e7bd59eb36ba', 'item-number': 2}, ... (omitted for brevity)
{'uid': '4ecf6450-7307-466c-bf19-663ba2fbaf69', 'item-number': 3}, ... (omitted for brevity)

输出已准备好供 csv.DictWriter 读取 csv.DictWriter ,例如:

import csv

with open('test.csv', 'w') as csv_file:
    fieldnames = ['uid', 'item-number']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames, extrasaction='ignore')
    writer.writeheader()

    for record in emp_data_parsed['base'][0]['base']:
        writer.writerow(record)

Output:

uid,name
2da21174-0af8-4b5b-b02e-2957a24d70e1,None
fcc5a2c8-3a78-4cc5-9fd3-e7bd59eb36ba,Tommy
4ecf6450-7307-466c-bf19-663ba2fbaf69,Sam

关于python - 使用pyjq解析多个json值,用逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52494242/

相关文章:

python - 在执行 pool.map 时,是否可以在 python 中每 x 秒执行一次函数?

python - 在 Python 中将列表转换为列

python - 有办法绕过 'assertion failed'错误吗?

python - 随机翻转 numpy 数组中每个图像的最有效方法

java - 从单个 servlet 接收并解释不同类型的 JSON 对象

javascript - 带有单引号的 X 可编辑字段问题

php - 在 Laravel 中验证 JSON 数组

mysql - 批处理文件操作csv并使用mysql导入

Powershell - 将字符串输出为 CSV 和格式

ruby - 如何压缩/简化从 csv 文件中提取数据的代码块?