【问题标题】:In Jq how to expand a json array of tuples into multiple elements在Jq中如何将元组的json数组扩展为多个元素
【发布时间】: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 的接口。语法和参数是一样的。

标签: python json jq


【解决方案1】:

简洁明了的解决方案:

.mc[].rc[]
| .id as $id
| .atb
| { atb_price:   map(.[0]),
    atb_amount:  map(.[1]),
    atb_id:      map($id) }

【讨论】:

  • 简洁优雅。谢谢。
【解决方案2】:

jq解决办法:

jq '[.mc[0].rc[] | .id as $id | reduce .atb[] as $i 
    ({"atb_price":[], "atb_amount":[], "atb_id": []}; 
     .atb_price += [$i[0]] | .atb_amount += [$i[1]] | .atb_id += [$id])]' jsonfile

输出:

[
  {
    "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
    ]
  }
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多