【发布时间】:2017-10-13 08:35:23
【问题描述】:
我有这个json字符串
{"op":"mcm","clk":"1147179697","pt":1439869512969,
"mc":[ {"id":"1.120040663",
"rc":[
{"atb":[[7.6,35],[7.2,25]],"id":11111},
{"atb":[[1.04,100],[1.02,200]],"id":22222}
],
"con":true,
"img":false}
]}
并且需要将atb元素连同id一起提取到价格和金额中:
[{
"atb_price": [7.6, 7.2]
"atb_amount": [35, 25]
"atb_id": [11111, 11111]
},
{
"atb_price": [1.04, 1.02]
"atb_amount": [100, 200]
"atb_id": [22222, 22222]
}]
到目前为止,我有这些过滤器,它们让我有一些方法,但并不完全。
1. 给出所有价格/金额/ID 的组合。
(.mc[].rc | map({"prices":.atb[][0], "vol":.atb[][1], "id":.id}))
2。 id 元素保留在数组之外。
.mc[].rc | map( {"id":.id, "atb": ( .atb | map({ "amount": .[1], "price":.[0] }) )[] } )
非常感谢任何帮助。
编辑 最终,我稍微修改了一个答案,因为我的 json 字符串比最初想象的要复杂,在某些情况下,需要处理 trd 元素。
{"op":"mcm","clk":"1147179697","pt":1439869512969,
"mc":[ {"id":"1.120040663",
"rc":[
{"atb":[[7.6,35],[7.2,25]],"id":11111},
{"atb":[[1.04,100],[1.02,200]],"id":22222}
{"trd":[[1.04,100],[1.02,200]],"id":22222}
],
"con":true,
"img":false}
]}
解决办法,
(. | del(.mc))
+ (.mc[] | del(.rc))
+ (.mc[].rc[]
| .id as $id | .ltp as $ltp | .tv as $rtv
| (select(.atl) | (.atl | {"atl.price": map(.[0]), "atl.volume": map(.[1]), "runner.id": map($id)})),
(select(.atb) | (.atb | {"atb.price": map(.[0]), "atb.volume": map(.[1]), "runner.id": map($id)})),
(select(.trd) | (.trd | {"trd.price": map(.[0]), "trd.volume": map(.[1]), "runner.id": map($id)}))
)
【问题讨论】:
-
Python 标签怎么了?
-
对不起,我应该说我通过 pyjq 使用 jq。我相信它可以作为 jq 的接口。语法和参数是一样的。