但是,我仍然无法将csv文件转换为JSON的层次结构。我在stackoverflow上找到的脚本是特定于某个问题的。假设必须对三个变量进行分组:
condition target sub
oxygen tree G1
oxygen tree G2
water car G3
water tree GZ
fire car GTD
oxygen bomb GYYS
这将导致这样的JSON文件(据我尝试):
oxygen
- tree
- G1
- G2
- bomb
-GYYS
water
- car
- G3
- tree
-GZ
fire
- car
- GTD
这些必须分组为嵌套结构,例如:
{
"name": "oxygen",
"children": [
{
"name": "tree",
"children": [
{"name": "G1"},
{"name": "G2"},
{"name": "GYYS"}
]
},
{
"name": "bomb",
"children": [
{"name": "GYYS"}
]
}
]
}
etc.
我尝试了该站点上的每个脚本,但是无法创建可以使flare.json这样的通用函数。我可以发布代码,但这就像上面提供的链接一样。因此,我要求一个简单的代码(或可以帮助我的示例)将其转换为类似flare.JSON的结构。
使用defaultdict从馆藏标准库赚了很多的具有层次结构简单,可解决的问题。因此,我为您的问题开发了示例解决方案。但是在运行脚本之前,请确保已用逗号分隔了csv文件(名为test.csv),或者可以在此处更改csv阅读器逻辑。
这是我测试脚本的csv文件。
condition, target, sub, dub
oxygen,tree,G1,T1
oxygen,tree,G2,T1
oxygen,tree,G2,T2
water,car,G3,T1
water,tree,GZ,T1
water,tree,GZ,T2
fire,car,GTD,T3
oxygen,bomb,GYYS,T1
从技术上讲,该脚本应适用于具有各种尺寸的任何类型的csv文件。但是您需要自己进行测试才能确定。
import csv
from collections import defaultdict
def ctree():
""" One of the python gems. Making possible to have dynamic tree structure.
"""
return defaultdict(ctree)
def build_leaf(name, leaf):
""" Recursive function to build desired custom tree structure
"""
res = {"name": name}
# add children node if the leaf actually has any children
if len(leaf.keys()) > 0:
res["children"] = [build_leaf(k, v) for k, v in leaf.items()]
return res
def main():
""" The main thread composed from two parts.
First it's parsing the csv file and builds a tree hierarchy from it.
Second it's recursively iterating over the tree and building custom
json-like structure (via dict).
And the last part is just printing the result.
"""
tree = ctree()
# NOTE: you need to have test.csv file as neighbor to this file
with open('test.csv') as csvfile:
reader = csv.reader(csvfile)
for rid, row in enumerate(reader):
# skipping first header row. remove this logic if your csv is
# headerless
if rid == 0:
continue
# usage of python magic to construct dynamic tree structure and
# basically grouping csv values under their parents
leaf = tree[row[0]]
for cid in range(1, len(row)):
leaf = leaf[row[cid]]
# building a custom tree structure
res = []
for name, leaf in tree.items():
res.append(build_leaf(name, leaf))
# printing results into the terminal
import json
print(json.dumps(res))
# so let's roll
main()
这是结果的json片段:
{
"name": "oxygen",
"children": [
{
"name": "tree",
"children": [
{
"name": "G2",
"children": [
{
"name": "T2"
},
{
"name": "T1"
}
]
},
{
"name": "G1",
"children": [
{
"name": "T1"
}
]
}
]
},
{
"name": "bomb",
"children": [
{
"name": "GYYS",
"children": [
{
"name": "T1"
}
]
}
]
}
]
}
请让我知道是否还有其他问题。快乐的pythonning;)
问题内容: 有谁知道是否有可以让我将XLS最好转换为JSON的应用程序? 我还将为CSV转换程序做准备,因为如果周围什么都没有的话,我可能最终不得不写自己。 问题答案: 这对我来说效果很好,不需要上传文件: https://github.com/cparker15/csv-to- json?files=1
问题内容: 我尝试使用json格式的文件作为输入。这是示例数据的片段。 可以在r中使用这种复杂的json格式制作一个csv,以便更平滑地处理数据吗? 例如,有以下基本类别:基本信息照片创建者位置类别网址 可以制作带有basic_information.id,creator.id等子类别类别的csv文件吗? 问题答案: 在研究您的答案时,我在评论中张贴了一些链接,但现在我非常确信这是解决问题的方法。
问题内容: 我有一个要转换为CSV文件的JSON文件。如何使用Python执行此操作? 我试过了: 但是,它没有用。我正在使用Django,收到的错误是: 然后,我尝试了以下方法: 然后我得到错误: 样本json文件: 问题答案: 首先,你的JSON具有嵌套对象,因此通常无法直接将其转换为CSV。你需要将其更改为以下内容: 这是从中生成CSV的代码: 你将获得以下输出:
问题内容: 我正在尝试使用PHP将CSV文件转换为JSON。 这是我的代码 //我看到了所有数据 然后我尝试显示它,但是屏幕上什么都没有显示。我所看到的只是空白屏幕和0错误消息。 我做错什么了吗?有人能帮我吗 ? 的相加结果 问题答案: 尝试这样:
问题内容: 下面是我从在线气象站提取的json结构。我还包括一个json_to_csv python脚本,该脚本应该将json数据转换为csv输出,但仅返回“ Key”错误。我只想从“ current_observation”中提取数据。 检索温度字符串并将其转换为.csv格式的最佳方法是什么?谢谢! 问题答案: 也许熊猫可以为您提供帮助。.read_json()函数创建一个不错的数据框,您可以从
问题内容: 我正在尝试使用该包将Go结构转换为JSON,但我得到的只是。我敢肯定这是完全显而易见的,但我看不到。 然后,当我尝试运行它时,我得到以下信息: 问题答案: 您需要导出的字段,以便在包装可以看到它。将字段重命名为。 输出: