Python脚本接收JSON遇json.decoder.JSONDecodeError问题求助
问题解决:JSON传递与格式转换
一、修复PowerShell中的JSON语法与传递问题
1. 修正JSON语法
你当前PowerShell代码里的JSON存在冗余外层大括号,导致JSON本身语法无效。正确的JSON结构应为:
{ "Items": [ { "Name": "baz", "File": "\\\\baz\\baz\\baz baz\\baz baz\\baz\\baz.xls" }, { "Name": "bar", "File": "\\\\bar\\bar\\bar bar\\bar bar\\bar\\bar.csv" }, { "Name": "foo", "File": "\\\\foo\\foo\\foo foo\\foo foo\\foo\\foo.csv" } ] }
2. 正确传递JSON参数
PowerShell直接传递带空格的字符串会被分割为多个参数,导致Python收到截断、格式错误的内容。推荐两种可靠传递方式:
方式1:用双引号包裹参数
$json = @" { "Items": [ { "Name": "baz", "File": "\\\\baz\\baz\\baz baz\\baz baz\\baz\\baz.xls" }, { "Name": "bar", "File": "\\\\bar\\bar\\bar bar\\bar bar\\bar\\bar.csv" }, { "Name": "foo", "File": "\\\\foo\\foo\\foo foo\\foo foo\\foo\\foo.csv" } ] } "@ & $Python $Script "$json"
方式2:通过管道传递(适合长JSON)
PowerShell代码:
$json = @" { "Items": [ { "Name": "baz", "File": "\\\\baz\\baz\\baz baz\\baz baz\\baz\\baz.xls" }, { "Name": "bar", "File": "\\\\bar\\bar\\bar bar\\bar bar\\bar\\bar.csv" }, { "Name": "foo", "File": "\\\\foo\\foo\\foo foo\\foo foo\\foo\\foo.csv" } ] } "@ $json | & $Python $Script
二、Python代码实现目标格式转换
以下是兼容参数传递和管道传递的完整代码,包含JSON解析与格式转换逻辑:
import sys import json def convert_json(input_data): parsed = json.loads(input_data) # 将Items数组转换为Name为键、File为值的字典 return {item["Name"]: item["File"] for item in parsed["Items"]} def main(): # 读取输入:优先读取命令行参数,否则读取标准输入 if len(sys.argv) > 1: input_data = sys.argv[1] else: input_data = sys.stdin.read() if not input_data: print("无输入数据") return try: converted_data = convert_json(input_data) # 输出格式化后的目标JSON print(json.dumps(converted_data, indent=2)) except json.JSONDecodeError as e: print(f"JSON解析错误: {e}") except KeyError as e: print(f"JSON结构异常,缺失必要键: {e}") if __name__ == "__main__": main()
三、验证输出结果
运行后,Python脚本会输出符合要求的格式:
{ "baz": "\\\\baz\\baz\\baz baz\\baz baz\\baz\\baz.xls", "bar": "\\\\bar\\bar\\bar bar\\bar bar\\bar\\bar.csv", "foo": "\\\\foo\\foo\\foo foo\\foo foo\\foo\\foo.csv" }
内容的提问来源于stack exchange,提问作者iBeMeltin
相关产品推荐
相关产品推荐

