我正在研究一个bash脚本(从技术上讲是通过Windows上的gitBash运行,但我认为这并不重要),它将一些JSON API数据转换为CSV文件。大多数情况都进行得相当不错,尤其是因为我不是特别熟悉JQ,因为这是我第一次使用它。
我有一些类似于以下数组的JSON数据。我想做的是从数据中选择cardType,MaskedPan,金额和日期时间。
这可能是人生中我的Google搜索第一次使我失败。我知道(或应该说想)那实际上是一个对象,而不仅仅是一个简单的数组。
我还没有发现任何可以帮助我了解如何获取所需数据并将其导出到CSV文件的信息。毫无疑问,我可以获取所需的其他数据,但是事实证明,这几部分对我来说是个大问题。
我正在尝试的脚本基本上可以归结为:
jq='/c/jq-win64.exe -r';
header='("cardType")';
fields='[.TransactionDetails[0].Value[0].cardType]';
$jq ''$header',(.[] | '$fields' | @csv)' < /t/API_Data/JSON/GetByDate-082719.json >
/t/API_Data/CSV/test.csv;
如果我执行.TransactionDetails [0] .Value,则可以获得整个数据块。但这在CSV中是有问题的,因为它包含逗号。
我想我可以将其作为TSV并将其作为一个大字符串导入到数据库中,然后将其子字符串化。但这不是“正确”的解决方案。我敢肯定,JQ有一种方法可以给我我所需要的东西。
"TransactionDetails": [
{
"TransactionId": 123456789,
"Name": "BlacklinePaymentDetail",
"Value": "{\"cardType\":\"Visa\",\"maskedPan\":\"1234\",\"paymentDetails\":{\"reference\":\"123456789012\",\"amount\":99.99,\"dateTime\":\"2019/08/27 08:41:09\"}}",
"ShowOnTill": false,
"PrintOnOrder": false,
"PrintOnReceipt": false
}
]
理想情况下,我可以在CSV中仅包含cardType,MaskedPan,金额和日期时间的字段,而不必提取包含所有字段的“值”。
任何建议将不胜感激。
答案 0 :(得分:1)
您缺少的成分是library(purrr)
teamstats <- fromJSON("https://statsapi.web.nhl.com/api/v1/teams?expand=team.stats")
team2 <- teamstats[["teams"]]$teamStats
final <- map_df(team2,~as.data.frame(t(unlist(.x[["splits"]]))))
# you can ignore the warning information here
final
,它将字符串化的JSON转换为JSON。在样本输入周围添加括号,
调用:
fromjson
产生:
jq -r -f program.jq input.json
其中program.jq是:
"Visa","1234",99.99,"2019/08/27 08:41:09"