我正在尝试将.csv转换为json / dict,以便以当前形式显示数据:
<div [innerHtml]="decode(object.value)"></div>
我目前正在使用这样的东西(以及使用pandas.df bc导入它将用于从json文件绘图):
cat1,cat2,cat3,name
1,2,3,a
4,5,6,b
7,8,9,c
我希望它以json / dict格式显示:
with open('Data.csv') as f:
reader = csv.DictReader(f)
rows = list(reader)
print (rows)
[{'cat1': '1', 'name': 'a', 'cat3': '3', 'cat2': '2'},
{'cat1': '4', 'name': 'b', 'cat3': '6', 'cat2': '5'},
{'cat1': '7', 'name': 'c', 'cat3': '9', 'cat2': '8'}]
直接导入不允许我在'all_cats'下包含'cat1','cat2','cat3'并将'name'分开。
任何帮助都将不胜感激。
答案 0 :(得分:0)
由于它的空格分隔而不是逗号分隔,因此您必须添加delimiter=" "
。此外,由于您的某些行预先有空格,这意味着您还必须添加skipinitialspace=True
。
reader = csv.DictReader(f, delimiter=" ", skipinitialspace=True)
rows = list(dict(row) for row in reader)
因此,如果你现在这样做:
for row in rows:
print(row)
输出将是:
{'cat1': '1', 'cat2': '2', 'cat3': '3', 'name': 'a'}
{'cat1': '4', 'cat2': '5', 'cat3': '6', 'name': 'b'}
{'cat1': '7', 'cat2': '8', 'cat3': '9', 'name': 'c'}
答案 1 :(得分:0)
正如在其他答案中已经提到的那样,您没有为要实现的目标指定有效的JSON格式。您可以使用json.loads(jsonDATAstring)
函数检查字符串是否包含有效的JSON格式:
import json
jsonDATAstring_1 = """
{"data: [{"all_cats": {"cat1": 1}, {"cat2": 2}, {"cat3": 3}}, "name": a},
{"all_cats": {"cat1": 4}, {"cat2": 5}, {"cat3": 6}}, "name": b},
{"all_cats": {"cat1": 7}, {"cat2": 8}, {"cat3": 8}}, "name": c}]}
"""
json.loads(jsonDATAstring_1)
如果您指定了预期的JSON格式,则会产生以下结果:
json.decoder.JSONDecodeError: Expecting ':' delimiter: line 2 column 12 (char 12)
从我的问题中我所知道的,我假设您想要得到的JSON字符串是以下字符串:
jsonDATAstring_2 = """
{"data": [{"all_cats": {"cat1": 1, "cat2": 2, "cat3": 3}, "name": "a"},
{"all_cats": {"cat1": 4, "cat2": 5, "cat3": 6}, "name": "b"},
{"all_cats": {"cat1": 7, "cat2": 8, "cat3": 8}, "name": "c"}]}
"""
json.loads(jsonDATAstring_2)
第二个字符串加载OK,所以假设:
rows = [{'cat1': '1', 'name': 'a', 'cat3': '3', 'cat2': '2'},
{'cat1': '4', 'name': 'b', 'cat3': '6', 'cat2': '5'},
{'cat1': '7', 'name': 'c', 'cat3': '9', 'cat2': '8'}]
您可以按照以下方式获得所需内容:
dctData = {"data": []}
lstCats = ['cat1', 'cat2', 'cat3']
for row in rows:
dctAllCats = {"all_cats":{}, "name":"?"}
for cat in lstCats:
dctAllCats["all_cats"][cat] = row[cat]
dctAllCats["name"] = row["name"]
dctData["data"].append(dctAllCats)
import pprint
pp = pprint.PrettyPrinter()
pp.pprint(dctData)
是什么赋予:
{'data': [{'all_cats': {'cat1': '1', 'cat2': '2', 'cat3': '3'}, 'name': 'a'}, {'all_cats': {'cat1': '4', 'cat2': '5', 'cat3': '6'}, 'name': 'b'}, {'all_cats': {'cat1': '7', 'cat2': '8', 'cat3': '9'}, 'name': 'c'}]}
现在可以将Python字典对象序列化为JSON字符串(或文件):
jsonString = json.dumps(dctData)
print(jsonString)
是什么赋予:
{"data": [{"all_cats": {"cat1": "1", "cat2": "2", "cat3": "3"}, "name": "a"}, {"all_cats": {"cat1": "4", "cat2": "5", "cat3": "6"}, "name": "b"}, {"all_cats": {"cat1": "7", "cat2": "8", "cat3": "9"}, "name": "c"}]}