我有一个Json文件,如果键存在于平面文件中,我需要在SQL中构建一个insert语句。我可以在Json中有多个记录,并且每个记录的键可能会随着时间的推移而改变。
键存储在OS上的文本文件中,它包含简单的几行键,可用于插入生成。我必须匹配JSON中的键并获取值以构建语句,如:
INSERT INTO sometable (key1, key2, key5, key8) VALUES
("key1_Value","key2_Value","key5_Value","key8_Value")
我的方法是在一个循环中处理json通过使用
jq -r '.value[].UnitTypes[]|to_entries[] | "\(.key) \(.value)"' test.json
当我试图从我的增量变量访问数组索引号时,问题来了,因为每个记录都可能改变了键:
i=1
jq -r --arg counter $i '.value[].UnitTypes[$counter]|to_entries[] | "\(.key) \(.value)"' test.json
jq: error (at test.json:1): Cannot index array with string "1"
我错过了什么。
谢谢你的帮助。
我的JSON文件:
{
"@odata.context": "Sample Text Grid Context",
"@odata.count": 1,
"value": [
{
"ListingId": "DUMMY_001",
"UnitTypes": [
{
"RAN_GarageDescription": "1 Car Garage - Att,1 Space",
"RAN_MiscIncluded": "Air Conditioning,Dishwasher,Range/Oven,Refrigerator,Wood Burning FP",
"RAN_OtherRoom1Desc": "Den/Office",
"RAN_OtherRoom2Desc": "Rec Room",
"UnitTypeActualRent": 975,
"RAN_HalfBaths": "1",
"RAN_FullBaths": "1",
"RAN_Location": "Left/1706",
"RAN_OtherRoom1Fin": "10x13",
"RAN_OtherRoom2Fin": "10x12",
"RAN_VacancyType": "Rent",
"RAN_ElectricPaidBy": "Tenant",
"RAN_HeatPaidBy": "Tenant",
"RAN_Bedroom1": "13x12",
"RAN_Bedroom2": "13x12",
"RAN_DiningRoom": "10x10",
"RAN_Kitchen": "12x10",
"RAN_Level": "Main",
"RAN_LivingGreatRoom": "20x12",
"UnitTypeBedsTotal": 2,
"UnitTypeType": "Unit 1",
"RAN_SqFtFin": "1465",
"RAN_WaterPaidBy": "Tenant",
"UnitTypeKey": "RAN50270568Group_1"
},
{
"RAN_GarageDescription": "1 Car Garage - Detached,1 Space",
"RAN_MiscIncluded": "Air Conditioning,Dishwasher,Range/Oven,Wood Burning FP,Refrigerator",
"RAN_Bedroom1": "12x12",
"RAN_Bedroom2": "12x12",
"RAN_Bedroom3": "12x10",
"RAN_DiningRoom": "10x10",
"RAN_Kitchen": "12x10",
"RAN_Level": "Main",
"RAN_LivingGreatRoom": "20x12",
"RAN_Location": "Right/1704",
"RAN_VacancyType": "Rent",
"RAN_WaterPaidBy": "Tenant",
"RAN_LeaseExpDate": "2023-07-31",
"RAN_HalfBaths": "0",
"UnitTypeActualRent": 1145,
"RAN_ElectricPaidBy": "Tenant",
"RAN_HeatPaidBy": "Tenant",
"RAN_FamilyRoom": "23x10",
"RAN_FullBaths": "2",
"UnitTypeBedsTotal": 3,
"UnitTypeType": "Unit 2",
"RAN_SqFtFin": "1442",
"UnitTypeKey": "RAN50270568Group_2"
}
]
}
]
}
1条答案
按热度按时间t9aqgxwy1#
试试看
而不是
问题是$counter参数以字符串的形式进入jq,但数组索引必须是number。
jq手册的一部分:
--arg name value
此选项将值作为预定义变量传递给jq程序。如果使用
--arg foo bar
运行jq,则$foo
在程序中可用,并且具有值"bar"
。请注意,value
将被视为字符串,因此--arg foo 123
将$foo
绑定到"123"
。