#python #json #mapping #jq
Вопрос:
Я пытаюсь сопоставить некоторые данные json с другой схемой. Моя исходная схема и рассматриваемое поле выглядят следующим образом
"metrics":[
{
"type":"active_duration",
"unit":"s",
"value":135.0
},
{
"type":"basal_energy_burned",
"unit":"kcal",
"value":2371.7412956
},
{
"type":"distance",
"unit":"m",
"value":1510.36558533
},
{
"type":"active_energy_burned",
"unit":"kcal",
"value":295.203469907
},
{
"type":"steps",
"unit":"count",
"value":1877
},
{
"type":"energy_burned",
"unit":"kcal",
"value":2666.944765507
}
],
и желаемый результат
{
"valueQuantity" : { "unit" : "count", "value" : 1877} ,
"category" : "steps"
},
{
"valueQuantity" : { "unit" : "kcal", "value" : 2666.944765507} ,
"category" : "energy_burned"
}
....
Я пробовал это
import pyjq
t = pyjq.all("""
{
"valueQuantity" : .metrics[] | { "unit" : .unit, "value" : .value} ,
"category" : .metrics[].type
}""", data)
но проблема в том, что .metrics[] запускает более одного, и в итоге у меня получается 36 строк (вместо 6)
Есть ли способ достичь этого?
Ответ №1:
Предположительно, вы имеете в виду:
.metrics[] | { "valueQuantity" : { "unit" : .unit, "value" : .value}, "category" : .type }
который можно сократить до:
.metrics[] | { valueQuantity: {unit, value}, category: .type }