Python:规范化Json响应(数组)

时间:2015-09-02 02:39:45

标签: python arrays json

我是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)

2 个答案:

答案 0 :(得分:1)

如果你的login看起来完全一样,那就是字典,那么当你这样做时就会出现问题 -

json_obj

您正在迭代for keyword in json_obj: 中的密钥,如果您尝试访问该密钥的json_obj,则应该错误地说['id']

您应首先在循环之前获取string indices must be integersid,然后循环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