如何在bash中解析json或将curl输出传递给python脚本

时间:2012-03-07 11:21:13

标签: python json bash pprint

我正在寻找一些方法在json中打印出curl的输出。 我为此目的编写了简短的python脚本,但它不适用于管道 此外,我不想使用子进程并从中运行curl:

所以python:

#!/usr/bin/python

import simplejson
from pprint import pprint
import sys
print pprint(simplejson.loads(sys.argv[1]))

json的信息是:

{"response": {"utilization": {"eic": [{"date": "2012.03.06", "usage": []}, {"date": "2012.03.07", "usage": [{"srvCode": "SVC302", "upload": 267547188, "api-calls": {"fileGetInfo": 30, "getUserStorageQuota": 0, "setUserStorageQuota": 0, "fileUploadFlashInit": 31, "getAPISessionUser": 0, "setFileAccessControl": 0, "fileGetPreviewUrl": 0, "fileStartMultipartUpload": 0, "getServiceQuota": 0, "fileGetPreviewUrlsForBunch": 10, "xcodingGetStreamUrl": 0, "getSessionTimeLimit": 0, "fileGetCoversUrlsForBunch": 27, "makePreviews": 0, "setServiceQuota": 0, "getAPISessionTrusted": 3, "getFileAccessControl": 0, "xcodingGetFormats": 0, "getQuotaNotificationEmail": 0, "fileGetDownloadUrl": 0, "xcodingGetStreamInfo": 0, "fileUploadDone": 30, "getLocalServiceUtilization": 9, "getServiceUtilization": 0, "fileDelete": 19, "setSessionTimeLimit": 0, "fileGetMultipartUploadUrl": 0, "fileUploadInit": 0, "extractFileMetadata": 30, "setQuotaNotificationEmail": 0}, "average-storage": 3801210959.4961309, "download": 0, "transcoding": 0}]}]}}}

2 个答案:

答案 0 :(得分:7)

使用shell中的json.tool来验证和漂亮打印:

$ echo '{"json":"obj"}' | python -mjson.tool
{
    "json": "obj"
}

答案 1 :(得分:3)

你试图读取传递给程序的第一个参数,这是错误的。

使用管道时,流被重定向到程序stdin。您应该从sys.stdin中读取,请参阅“How do you read from stdin in python”。