解析json数据

时间:2014-02-20 15:13:56

标签: python json

我的data.json

{"a":[{"b":{"c":{ "foo1":1, "foo2":2, "foo3":3, "foo4":4}}}],"d":[{"e":{"bar1":1, "bar2":2, "bar3":3, "bar4":4}}]}

我可以列出key/pair个值。我的代码是:

#! /usr/bin/python
import json
from pprint import pprint

 with open('data2.json') as data_file:    
   data = json.load(data_file)
 pprint(data["d"][0]["e"])

这给了我:

{u'bar1': 1, u'bar2': 2, u'bar3': 3, u'bar4': 4}

但我想只显示keys,而不显示任何quotesu,如下所示:

bar1, bar2, bar3, bar4

有人能提出什么建议吗?它不一定只在python中,也可以在shell脚本中。

3 个答案:

答案 0 :(得分:1)

此对象的键是unicode字符串类的实例。鉴于此,它们作为键的dict实例的默认打印行为将在您在帖子中显示时打印它们。

这是因为dict将其内容表示为字符串(__repr__和/或__str__)的实现旨在向您展示对象所在的内容dict,而不是那些的字符串表示形式。这是一个重要的区别,例如:

In [86]: print u'hi'
hi

In [87]: x = u'hi'

In [88]: x
Out[88]: u'hi'

In [89]: print x

hi

这应该对你有用,假设以逗号分隔的unicode打印密钥就可以了:

print ", ".join(data["d"][0]["e"])

您也可以使用keys中的dict成员函数来实现此目的,但这并非绝对必要。

答案 1 :(得分:0)

data["d"][0]["e"]返回一个字典。在python2中,您可以使用它来获取该dict的键,如下所示:

k = data["d"][0]["e"].keys()
print(", ".join(k))

在python3中,将k包装在像这样的列表中

k = list(data["d"][0]["e"].keys())
print(", ".join(k))

更简单的是,join将迭代字典的键。

print(", ".join(data["d"][0]["e"]))

感谢@thefourtheye指出这一点。

答案 2 :(得分:0)

print ', '.join((data["d"][0]["e"].keys()))