【发布时间】:2017-03-11 17:09:44
【问题描述】:
我有一个名为 MyFile.json 的 JSON 文件,其中包含以下结构:
[{u'randomName1': {u'A': 16,u'B': 20,u'C': 71},u'randomName2': {u'A': 12,u'B': 17,u'C': 47}},...]
我可以像这样打开文件并加载它:
import json
with open('MyFile.json') as data_file:
data = json.load(data_file)
我可以像这样访问第一个元素中的值:
data[0]["randomName1"][A]
data[0]["randomName1"][B]
data[0]["randomName1"][C]
data[0]["randomName2"][A]
data[0]["randomName2"][B]
data[0]["randomName2"][C]
A B C 键总是被命名为 A B C(而且它们总是正好有 3 个,所以这没问题。
问题是: 1)我不知道列表中有多少元素,并且 2)我不知道每个元素中有多少个“randomName”键,并且 3) 我不知道 randomName 键的名称。
如何扫描/循环浏览整个文件,获取所有元素,并获取每个元素的所有键名和关联键值?
我没有编写自己的复杂解析脚本的知识或愿望。我期待 json 库有办法提供这些信息。
例如(我意识到这不是一个完美的类比)如果在 AWK 中给定一个数组 X,我可以使用
扫描所有索引/名称对for(index in X){print index, X[index]);
在 Python 中有这样的东西吗?
---------------- 此行下方的新信息 -------------
感谢 Padraic 和 E.Gordon。这对解决问题大有帮助。
为了使我的初始帖子尽可能简洁,我过于简化了 JSON 数据示例。
我的 JSON 数据实际上是这样的:
data=[
{ {u'X': u'randomName1': {u'A': 11,u'B': 12,u'C': 13}, u'randomName2': {u'A': 21,u'B': 22,u'C': 23}, ... }, u'Y': 101, u'Z': 102 },
.
.
.
]
省略号代表任意重复,如原始帖子中所述。 X Y Z 键始终命名为 X Y Z(并且始终恰好有 3 个)。
以您的帖子为起点,我已经为此工作了几个小时,但作为 Python 新手,我感到很困惑。我无法弄清楚如何添加额外的循环来处理该数据。我希望输出流看起来像这样:
Z,102,Y,101,randomName1,A,11,B,12,C,13,randomName2,A,21,B,22,C,23,...
.
.
.
感谢您的帮助。
-
----------------- 3/23/16 更新如下 --------------
再次感谢您的帮助。这就是我最终想出的。它可以满足我的需要:
import json
with open('MyFile.json') as data_file:
data = json.load(data_file)
for record in data:
print record['Z'],record['Y']
for randomName in record['X']:
print randomName, randomName['A'], randomName['B'],randomName['C']
...
【问题讨论】:
-
谢谢帕德莱克和 E.Gordon。你的帖子很有帮助。我认为我可以从那里解决问题,但在试图使我的原始帖子尽可能简洁时,我担心我过度简化了 JSON 数据示例。我编辑了我的原始帖子以添加新信息。感谢您的帮助。