如何将键值对的JSON数组转换为JSON对象?

时间:2014-04-11 19:54:16

标签: python json google-app-engine python-2.7 simplejson

我从网站上获得如下数据:

{
  ...
  u'rows':[
    [
      u'mail@example.com',
      u'74'
    ],
    [
      u'mail2@example.com',
      u'1'
    ],
    [
      u'mail3@example.com',
      u'1'
    ],
    ...
  ],

我只展示了我需要的数据。如何将其转换为json,如:

{u'mail@example.com': 74, u'mail2@example.com': 1, u'mail3@example.com': 1, ...}

我可以逐个阅读元素:

if response.get('rows'):
    total = 0
    for row in response.get('rows'):
        total += int(row[1])
        logging.info(row[0]+": "+row[1])

但不确定接下来应该做些什么。不要以为我应该只生成字符串。

3 个答案:

答案 0 :(得分:2)

您需要创建一个dict并使用行的内容填充它:

d = {}
for row in response.get('rows'):
    d[row[0]] = row[1]

然后,如果你想要一个json字符串表示:

json.dumps(d)

答案 1 :(得分:0)

像这样:

>>> first_json = { 'rows':[['mail@example.com', '74'],['mail2@example.com','1'],['mail3@example.com','1']]}
>>> second_json = {item[0]: item[1] for item in first_json['rows']}
>>> second_json
{'mail@example.com': '74', 'mail2@example.com': '1', 'mail3@example.com': '1'}
>>>

您必须使用json将上述数据字符串加载为loads()first_json假定它可以作为json对象使用。然后在计算second_json之后,使用dumps() second_json获取输出json

修改

看起来您正在计算特定电子邮件的总电子邮件数。在这种情况下,我会使用defaultdict

from collections import defaultdict

second_json = defaultdict(int)
for item in first_json['rows']:
    second_json[item[0]] += int(item[1])

然后按照上面的说明打印second_json

答案 2 :(得分:0)

bbb = {}
aaa = {
   u'rows':[
    [
      u'mail@example.com',
      u'74'
    ],
    [
      u'mail2@example.com',
      u'1'
    ],
    [
      u'mail3@example.com',
      u'1'
    ],
  ],
}

for item in aaa['rows']:
    bbb[item[0]] = item[1]

print bbb

>>> {u'mail@example.com': u'74', u'mail2@example.com': u'1', u'mail3@example.com': u'1'}