我目前是python的新手,我们有一个csv文件,需要将其转换为嵌套的JSON文件。
name type aitm alitm aaitm adsc1
specs glass 70072187 ESA65Z45 ESA 65Z45 CUT TIP FG 1808-40
我正在尝试以以下json格式构建以上数据
{
"entities": [
{
"name": "spec",
"type": "glass",
"data": {
"attributes": {
"aitm": {
"values": [
{
"value": "70072187",
"source": "internal",
"locale": "en_US"
}
]
},
"alitm": {
"values": [
{
"value": "ESA65Z45",
"source": "internal",
"locale": "en_US"
}
]
},
"aaitm": {
"values": [
{
"value": "ESA 65Z45",
"source": "internal",
"locale": "en_US"
}
]
},
"adsc1": {
"values": [
{
"value": "CUT TIP FG",
"source": "internal",
"locale": "en_US"
}
]
}
}
}
}
]
}
在上述JSON中,有一些csv源和语言环境中不存在的值在数据中不存在,但是我需要将这些值合并到结构中。
我尝试过使用python和R,但由于我也尝试过使用这种复杂的JSON结构,所以我们无法成功 详细信息= df.groupby(['name','type'])。apply( lambda r:r [[''aitm','alitm']]。to_dict(orient ='records'))
nested = details.unstack('name')
pprint(grouped.unstack('name').to_dict())
output = nested.apply(lambda s: [
{s.index.name: idx, 'Details': value}
for idx, value in s.items()
]).to_dict('records')
print(output)
我得到的结构不正确。请提出使用python解决此问题的方法。
答案 0 :(得分:0)
Python具有Mathf.Approximately
(例如jq)的包装器,因此您可能会对以下使用jq的解决方案感兴趣,特别是因为Q表示您在任何情况下都考虑了python的替代方法。请注意,下面的解决方案在数据允许的范围内是“数据驱动的”。特别是,将处理任意多列。
在下面,我假设输入实际上是CSV(逗号分隔的值),用正则表达式“ *,*”进行分割就足够了。如果输入更为复杂,则将其转换为更常规的格式(例如TSV。
def toa: [splits(" *, *")];
def column($n; $headers):
{ ($headers[$n]) :
{ values: [{value: .[$n], source: "internal", locale: "en_US"}] }
};
toa as $headers
| [ inputs
| toa
| {name: .[0],
type: .[1],
data: { attributes:
([range(2; $headers|length) as $col
| column($col; $headers) ] | add)
}
}]
| {entities: .}
从命令行说明用法最简单。使用上面的程序将其保存在名为csv2json.jq的文件中,并将数据存储在input.csv中:
jq -R -f csv2json.jq input.csv