我有一个大文件,其中包含 json 对象,每个对象都在一个新行中。
文件示例
{"Name" :"%Hana-29-Mrs-Smith","job":"engineer"}
{"Name" :"%Mike-31-Mr-Larry","job":"marketing"}
{"Name" :"%Jhon-40-Mr-Doe","job":"engineer"}
期望的输出:
{"Name" :"%Hana-29-Mr-Smith", "f_nams":"Hana", "age":29, "title":"Mrs", "l_name":"Smith","job":"engineer"}
{"Name" :"%Mike-29-Mr-Larry", "f_nams":"Mike", "age":31, "title":"Mr", "l_name":"Larry","job":"marketing"}
{"Name" :"%Jhon-29-Mr-Smith", "f_nams":"Jhon", "age":40, "title":"Mr", "l_name":"Doe","job":"engineer"}
对于诸如此类的非嵌套对象,您可以考虑使用Miller
一种具有表现力、程序性和清晰性(尽管脚本本身看起来有点冗长)的可能方法是将 Python3 与
json
模块一起使用。它的工作方式是我们使用上下文管理器
open()
打开文件并在完成后自动关闭。从问题中的示例数据中,我们可以假设每个 json 对象位于不同的行上(注意:如果您使用的实际数据具有多行 json 对象,您可能必须调整脚本以使用try-except
块读取文件直到完整的 json数据被读入变量)。从那里开始,它只是文本操作和 Python 魔术:将键“名称”的值拆分为
-
字符上的标记到列表中,将标记列表放入新字典并使用 Python 3.5**
运算符加入两个字典,我相信这称为“关键字解包"(如果您使用其他版本的 Python,请查看链接以获取替代方案)。所有这些都转换回 json 对象并打印在标准输出上。如果您确实需要将其保存到新文件,请使用 shell 重定向,./parse_data.py ./data.json > ./new_data.json
或者如果您想在屏幕上同时看到它./parse_data.py ./data.json | tee ./new_data.json
它是如何工作的: