python - 在 Python 中解析嵌套的 Json 以删除列中的特殊字符
问题描述
这是我的 Json 文件
{
"highest_table": {
"items": [{
"key": "Human 1",
"columns": {
"Na$me": "Tom",
"Description(ms/2)": "Table Number One on the Top",
"A&ge": "24",
"Ge_nder": "M"
}
},
{
"key": "Human 2",
"columns": {
"Na$me": "John",
"Description(ms/2)": "Table Number One on the Top",
"A&ge": "23",
"Ge_nder": "M"
}
}
]
}
}
目标是删除列名中的任何和所有特殊字符(或者如果更简单的话,删除 .json 文件中的任何特殊字符),并返回一个 .json 文件。我最初的想法是将其转换为 pandas,删除列标题中的特殊字符并将其转换回 .json 文件。
这是我到目前为止所尝试的。它们都只打印一行。
import json
from pandas.io.json import json_normalize
data_file = r"C:\characters.json"
with open(data_file) as data_file:
data = json.load(data_file)
df = json_normalize(data)
--
data_file = r"C:\characters.json"
df = pd.read_json(data_file)
如何提取列、删除特殊字符并将它们放回 .json 文件中?
解决方案
有点问答-您必须提供完整的实现,fixkey
但这应该可以解决您的问题。
import json
def fixkey(key):
# toy implementation
#print("fixing {}".format(key))
return key.replace("&", "").replace("$", "")
def normalize(data):
#print("normalizing {}".format(data))
if isinstance(data, dict):
data = {fixkey(key): normalize(value) for key, value in data.items()}
elif isinstance(data, list):
data = [normalize(item) for item in data]
return data
jsdata = """
{
"highest_table": {
"items": [{
"key": "Human 1",
"columns": {
"Na$me": "Tom",
"Description(ms/2)": "Table Number One on the Top",
"A&ge": "24",
"Ge_nder": "M"
}
},
{
"key": "Human 2",
"columns": {
"Na$me": "John",
"Description(ms/2)": "Table Number One on the Top",
"A&ge": "23",
"Ge_nder": "M"
}
}
]
}
}
"""
data = json.loads(jsdata)
data = normalize(data)
result = json.dumps(data, indent=2)
print(result)
推荐阅读
- c++ - 获取 LNK2019、LNK2001、LNK1120 编译并运行调度程序。使用队列模板、节点模板和 cpp 文件
- vue.js - 过渡不适用于 vue 3 中的插槽
- python - discord.py 机器人没有给出成员加入时提供的角色
- laravel - 在 laravel 8 中验证两个字段是否相同
- flutter - 在 Flutter 中限制应用程序中的 Googlemap 大小
- bash - FSL - 我可以将 fsf 文件(程序设置文件)中的路径设置为当前工作目录吗?
- javascript - useState Hook - 如何将项目附加到有状态数组的末尾?
- docker - 创建 droplet 后如何添加 docker?
- algorithm - 给定一个循环链表,找到一个合适的头,使得值的运行总和永远不会为负
- sql - 如何在 spark/sql 中过滤掉所有重复的电话号码