Python 将JSON文档展平为单行
上下文:我正在集成的API以漂亮的打印形式输出数据,如下所示。我有一个MSSQL解析过程,它要求输入JSON在一行中有一个平面形式(除去制表符) 问题: 我发现了一些半相关的问题&但它们似乎不能满足我的需求,因为我不想在文件级别执行操作 有谁能推荐一些具体的方法来以更细粒度的方式将JSON文本转换成一行吗?也许是正则表达式或一些字符串操作方法 当前JSON格式:Python 将JSON文档展平为单行,python,arrays,json,regex,parsing,Python,Arrays,Json,Regex,Parsing,上下文:我正在集成的API以漂亮的打印形式输出数据,如下所示。我有一个MSSQL解析过程,它要求输入JSON在一行中有一个平面形式(除去制表符) 问题: 我发现了一些半相关的问题&但它们似乎不能满足我的需求,因为我不想在文件级别执行操作 有谁能推荐一些具体的方法来以更细粒度的方式将JSON文本转换成一行吗?也许是正则表达式或一些字符串操作方法 当前JSON格式: { "data": { "first_name": "Eric", "last_name": "B", "
{
"data": {
"first_name": "Eric",
"last_name": "B",
"email": null,
"score": null,
"domain": "@datashiftlabs.io",
"position": null,
"twitter": null,
"linkedin_url": null,
"phone_number": null,
"company": null,
"sources": []
},
"meta": {
"params": {
"first_name": "Eric",
"last_name": "B",
"full_name": null,
"domain": "@datashiftlabs.io",
"company": null
}
}
}
{"data": {"first_name": "Eric","last_name": "B","email": null,"score": null,"domain": "datashiftlabs.io","position": null,"twitter": null,"linkedin_url": null,"phone_number": null,"company": null,"sources": []},"meta": {"params": {"first_name": "Eric","last_name": "B","full_name": null,"domain": "datashiftlabs.io","company": null}}}
所需表格:
{
"data": {
"first_name": "Eric",
"last_name": "B",
"email": null,
"score": null,
"domain": "@datashiftlabs.io",
"position": null,
"twitter": null,
"linkedin_url": null,
"phone_number": null,
"company": null,
"sources": []
},
"meta": {
"params": {
"first_name": "Eric",
"last_name": "B",
"full_name": null,
"domain": "@datashiftlabs.io",
"company": null
}
}
}
{"data": {"first_name": "Eric","last_name": "B","email": null,"score": null,"domain": "datashiftlabs.io","position": null,"twitter": null,"linkedin_url": null,"phone_number": null,"company": null,"sources": []},"meta": {"params": {"first_name": "Eric","last_name": "B","full_name": null,"domain": "datashiftlabs.io","company": null}}}
我不确定这是否是您真正想要的,但您可以使用
json
库将json字符串转换为对象,然后再将其转换回字符串
示例如下所示
import json
json_str = """{
"data": {
"first_name": "Eric",
"last_name": "B",
"email": null,
"score": null,
"domain": "@datashiftlabs.io",
"position": null,
"twitter": null,
"linkedin_url": null,
"phone_number": null,
"company": null,
"sources": []
},
"meta": {
"params": {
"first_name": "Eric",
"last_name": "B",
"full_name": null,
"domain": "@datashiftlabs.io",
"company": null
}
}
}"""
obj = json.loads(json_str)
flatten_str = json.dumps(obj)
print(flatten_str)
备选方案是使用字符串替换和正则表达式替换来删除所有不必要的字符,如换行符、多个空格和制表符。此函数的快速草稿如下所示。
注意:当前正则表达式不能完美地工作,在某些边缘情况下仍有一些意外行为,例如字符串末尾有多个空格
为什么完整文件不能工作?从您的示例来看,它看起来像是在整平整个输入文件。同样,MSSQL过程取决于特定的结构,添加的选项卡错误地形成了所需的结构并阻止正确执行解析。抱歉,我误解了“我不想在文件级执行预成型操作”的说法这意味着您只想对文件中的一部分行执行操作:/您的“MSSQL进程”似乎是垃圾。不符合文件标准的工具可能会出现其他问题。精心编制的恶意数据可能允许向数据库中进行二级注入。换句话说:你的问题在于这个工具,而不是JSON。第一种方法是可靠的。第二个比我预期的要好,但并不完美;考虑<代码> [ [你好] ] /代码>我有一些多空间区域幸存下来。我也不确定是否还有其他我还没有发现的情况。此外(仅在第二种方法中),在某些情况下,空格会折叠在带引号的字符串中,当这些带引号的字符串还包含大括号作为文本值并带有相邻的空格时。@CharlesDuffy你完全正确,第二种选择可能会犯一些错误,要么删除字符串中重要的空格,要么保留多余的空格,这就是为什么我说,这只是一个快速草稿。正则表达式在真正完美工作之前需要改进很多。我建议明确指出语义变化的风险。@CharlesDuffy我为当前正则表达式可能出现的问题添加了一个快速免责声明