我有一个 Excel 电子表格,当我直接在 python 中读取它时,它失败了。所以我先在Power Query中读,然后在python中读,但是在Power Query中读时丢失了json双引号。
我尝试了demjson3,但无法成功。 我尝试用Python逐行阅读,这不是一个好主意。 我希望能够在 python 中将其呈现为 json。
主文件是:
在此处输入图像描述
处理后的 Power Query 文件:
在此处输入图像描述
我明白你的问题了。你需要把 Power Query 处理后的类 JSON 字符串转换为有效的 JSON 格式。因为 Power Query 省略了必要的双引号,所以你需要手动添加它们。
以下 Python 代码片段可以帮助你实现这个目标:
import json
def format_json(input_string):
"""将 Power Query 输出的类 JSON 字符串转换为有效的 JSON 格式。
Args:
input_string: Power Query 输出的字符串。
Returns:
有效的 JSON 字符串或引发异常。
"""
formatted_string = input_string.replace('{', '{"').replace('}', '"}').replace(':', '":"', 1).replace(',', '","').replace('"[', '[').replace(']"', ']').replace('"{', '{').replace('}"', '}')
try:
json.loads(formatted_string) # 验证格式是否正确
return formatted_string
except json.JSONDecodeError as e:
raise ValueError(f"Invalid JSON format: {e}") from e
# 示例用法
power_query_output = "{Country: US, Weather: Sunny, Temperature: 25}"
try:
valid_json = format_json(power_query_output)
print(valid_json) # 输出: {"Country": "US", "Weather": "Sunny", "Temperature": "25"}
except ValueError as e:
print(f"Error: {e}")
这段代码做了以下事情:
-
定义了一个名为
format_json
的函数,它接受一个字符串作为输入。 -
使用字符串替换方法将
{
替换为{"
,}
替换为"}
,:
替换为": "
,,
替换为", "
,以便添加缺失的双引号。 -
尝试使用
json.loads()
将格式化后的字符串解析为 JSON 对象。如果解析成功,则返回格式化后的字符串;否则,引发 ValueError 异常,指示格式无效。
你可以将 Power Query 输出的每一行传递给
format_json
函数,将其转换为有效的 JSON 字符串。
注意: 这个解决方案假设你的 Power Query 输出中没有嵌套的 JSON 对象或数组。如果存在嵌套结构,你需要更复杂的逻辑来处理双引号的添加。
希望这可以帮助你!
标签:python,json,excel,dictionary,powerquery From: 78810389