python - 遍历和连接 json 中的值
问题描述
我有一个 json 文件,我正在尝试迭代以加入其中的文件路径,但我一直遇到问题:
{
"files": [
{
"name": "Mississippi",
"folder": "H:\\Data\\Mississippi",
"zFeatures": [
{
"name": "Land_Use",
"file": "MS_LandUse.shp",
}
]
}
]
}
在这种情况下,我想加入file
,folder
所以我的输出将是:"H:\\Data\\Mississippi\\MS_LandUse.shp"
。我确实有数百个其他文件也需要加入,所以我需要遍历这个 json。
我试过自上而下迭代,但失败了
with open("filoc.json", "r") as i:
filoc = json.load(i)
for files in filoc['files']:
for folder in files['folder']:
for zFeatures in files['zFeatures']:
#This is where I'm stumped, I feel like I'm already doing it wrong.
解决方案
你在做某事。很遗憾,您没有确切说明您的问题是什么。首先,让我更正 JSON 数据(它已损坏):
{
"files": [
{
"name": "Mississippi",
"folder": "H:\\Data\\Mississippi",
"zFeatures": [
{
"name": "Land_Use",
"file": "MS_LandUse.shp"
}
]
}
]
}
然后,您可以通过以下方式组合os.path.join
并os.path.abspath
加入并确保路径正确:
import os, json
with open("test.json", "r") as i:
filoc = json.load(i)
for file_info in filoc['files']:
print(os.path.abspath(os.path.join(file_info['folder'], file_info['zFeatures'][0]['file'])))
这假设在zFeatures
tho 下只有一个文件。如果有多个,只需执行以下操作:
for file_info in filoc['files']:
for f_obj in file_info['zFeatures']:
print(...(file_info['zFeatures'][f_obj]['file']))
但我假设这个 blob 是每个文件的。
最后,当心os.path.abspath - 如果在 Linux 机器上传递一个 windows 路径 - 它会生成一个不稳定的路径。如果路径是混合的,请跳过abspath()
并希望路径没有混合或正确。
推荐阅读
- javascript - 如何从表 onclick 中获取当前 td 值?
- python - 为什么保存后我的复选框未选中?
- excel - VBA 运行时错误 1004 应用程序定义或对象定义错误
- python - 如何在 Django 中显示父类别中子类别的产品?
- php - PDO 错误:布尔和整数类型的输入语法无效 - 如果输入为空
- html - 如何在 Bootstrap 5 中制作响应式网格 UI?
- flutter - VSCODE:Flutter 无法为 Android 构建
- bash - 从终端加载 macOS El Capitan 上的 .bashrc 和 .bash_profile 问题需要太长时间
- java - 为什么我不能在另一个类中声明和创建对象?
- angular - Angular 重用子路由取决于父级