我是JSON和Python的新手,我正在努力实现以下
需要在JSON下解析
{
"id": "12345abc",
"codes": [
"BSVN1FKW3JKKNNMN",
"HJYYUKJJL999OJR",
"DFTTHJJJJ0099JUU",
"FGUUKHKJHJGJJYGJ"
],
"ctr": {
"source": "xyz",
"user_id": "1234"
}
}
预期输出:在“代码”值
上标准化ID~CODES~USER_ID
12345abc~BSVN1FKW3JKKNNMN~1234
12345abc~HJYYUKJJL999OJR~1234
12345abc~DFTTHJJJJ0099JUU~1234
12345abc~FGUUKHKJHJGJJYGJ~1234
从下面开始,但需要帮助才能达到我想要的输出。
“代码”块可以有多个以逗号分隔的值。
以下代码抛出错误“TypeError:string indices必须是整数”
#!/usr/bin/python
import os
import json
import csv
f = open('rspns.csv','w')
writer = csv.writer(f,delimiter = '~')
headers = [‘ID’,’CODES’,’USER_ID’]
default = ''
writer.writerow(headers)
string = open('sample.json').read().decode('utf-8')
json_obj = json.loads(string)
#print json_obj['id']
#print json_obj['codes']
#print json_obj['codes'][0]
#print json_obj['codes'][1]
#print json_obj['codes’][2]
#print json_obj['codes’][3]
#print json_obj['ctr’][‘user_id']
for keyword in json_obj:
row = []
row.append(str(keyword['id']))
row.append(str(keyword['codes']))
row.append(str(keyword['ctr’][‘user_id']))
writer.writerow(row)
答案 0 :(得分:1)
如果你的login
看起来完全一样,那就是字典,那么当你这样做时就会出现问题 -
json_obj
您正在迭代for keyword in json_obj:
中的密钥,如果您尝试访问该密钥的json_obj
,则应该错误地说['id']
。
您应首先在循环之前获取string indices must be integers
和id
,然后循环user_id
,然后将之前计算的json_obj['codes']
和id
与从user_id
列表到codes
csv的当前值作为一行。
示例 -
writer
答案 1 :(得分:0)
你不想迭代struct Vertex
{
glm::vec3 position;
glm::vec2 tex_coords;
};
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, position);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, tex_coords));
,因为那是一个字典,迭代将得到密钥。 json_obj
是由于尝试索引键('id','code'和'ctr')(它们是字符串)而引起的,就好像它们是字典一样。
相反,您希望TypeError
中的每个代码都有一个单独的行,并使用json_obj['codes']
字典进行查找:
json_obj