【发布时间】:2017-12-04 01:35:40
【问题描述】:
我在使用函数解析 json 文件时遇到问题。我试图解决我的问题几个小时,但我找不到解决方法:/
这是我正在解析的 json 源代码(我知道我可以删除每个“series_x”上的 []):
{
"series_1":
[
{
"x": [1,2,4,6,8],
"y": [1,4,8,12,16]
}
],
"series_2":
[
{
"x": [1,2,4,6,8],
"y": [1,4,16,36,42]
}
]
}
我在 Python 中编写了一个函数来返回 x 或 y 的特定值。这个功能很好用。
import json
def importJson(filePath):
with open(filePath) as data_file:
data = json.load(data_file)
data = data['series_1'][0]['x']
return data
print(importJson('jasonfile.json'))
现在这很酷,但函数将始终返回相同的值。所以这有点没有意义。因此,我尝试编写一个将 filePath 和数据列表的多维元素作为参数的函数。注意:我希望此参数包含未定义数量的列表维度,以防我想返回所有“series_1”或其中的特定值“y”。 所以我写了这个:
import json
def importJson(filePath, dataPath):
with open(filePath) as data_file:
data = json.load(data_file)
dataOut = data[dataPath[0]]
i=1
while i < len(dataPath):
dataOut += [dataPath[i]]
i += 1
return dataOut
print(importJson('dataSource.json', list(['series_1',0,'x'])))
您可以想象它不起作用,因为不可能像这样连接多维列表。所以 a[0][1] != a[0] + [1] 我尝试了很多东西,但没有任何效果,我觉得解决方案很简单,我就是无法理解它。有人看到可以提供帮助的东西吗? 谢谢!
【问题讨论】:
-
尝试使用 pprint 模块查看每一步的输出?
from pprint import pprint -
我不知道您为什么要谈论多维数组。您的输入没有任何内容,我不确定您为什么要介绍它们。查看输入的结构:带有“series_1”之类的键的字典,其中每个值是一个元素的列表,该元素具有带有“x”和“y”之类的键的字典,其中每个值都是数字列表。您需要通过
dataPath在每个级别获得正确的东西。当您到达dataPath(大概是一个列表)的末尾时,您将返回您所拥有的。 -
也许我没有解释清楚,对此感到抱歉。我希望 te 函数将 jsonfile 中返回的内容作为参数。所以如果我只输入数据['series_1'],没问题它会返回它。问题是我希望这个函数扩展到 Json 的其他节点,这就是为什么我使用 while 来“定义”需要多少个注释来解析和构建解析器,例如 data['series_1'] [0]['x'][0]。这更清楚了吗?
标签: python arrays json multidimensional-array