You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下非标准JSON格式键值对提取方案咨询

最优解决方案:用Python的ast.literal_eval()解析非标准类JSON数据

嘿,这个问题我太懂了!遇到这种用单引号包裹、结构是JSON样但没法用jq等标准JSON工具解析,而且键顺序还乱跳的数据,正则和cut确实搞不定——尤其是还有嵌套字典的情况,正则写起来会疯掉。咱直接用你已经在调用的Python来解决,这才是最省心的办法!

核心思路:用ast.literal_eval()安全解析类JSON

Python的ast模块里的literal_eval()函数专门用来解析这种“类Python字面量”的字符串,它能处理单引号的键值对、嵌套结构,而且比直接用eval()安全一万倍(不会执行恶意代码)。完美适配你遇到的场景。

完整脚本示例(getprice.py)

把下面的代码存成getprice.py,就能轻松提取任何你想要的键值对,完全不管键的顺序:

import ast
import sys

def extract_price_data():
    # 从命令行获取传入的类JSON字符串
    if len(sys.argv) < 2:
        print("请传入要解析的类JSON数据参数")
        return
    
    raw_input = sys.argv[1]
    try:
        # 把类JSON字符串转成Python字典
        data_dict = ast.literal_eval(raw_input)
        
        # 提取顶层字段,用get()避免键不存在报错
        print(f"🔹 Last价格: {data_dict.get('last', '未找到')}")
        print(f"🔹 Bid价格: {data_dict.get('bid', '未找到')}")
        print(f"🔹 Ask价格: {data_dict.get('ask', '未找到')}")
        
        # 处理嵌套的volume字段
        volume_data = data_dict.get('volume', {})
        print("\n📊 成交量数据:")
        print(f"   USD成交量: {volume_data.get('USD', '未找到')}")
        print(f"   TLC成交量: {volume_data.get('TLC', '未找到')}")
        print(f"   时间戳: {volume_data.get('timestamp', '未找到')}")
        
    except SyntaxError as e:
        print(f"❌ 解析失败:输入数据格式有问题 - {e}")
    except Exception as e:
        print(f"❌ 发生未知错误:{e}")

if __name__ == "__main__":
    extract_price_data()

怎么用?

直接像你原来那样调用就行,不管键的顺序怎么变,输出都稳定:

root# python3 getprice.py {'bid': '11546.94', 'ask': '11551.96', 'volume': {'USD': '51726566.064352112368', 'TLC': '4388.676466043', 'timestamp': 1561785300000}, 'last': '11551.96'}

输出会是整理好的结构化内容,完全不用操心键的顺序。

快速提取单个字段(单行命令)

如果只是临时想提取某个字段,比如last,可以直接用单行Python命令,不用写脚本:

root# python3 -c "import ast, sys; print(ast.literal_eval(sys.argv[1])['last'])" {'last': '11551.96', 'bid': '11546.94', 'ask': '11551.96'}

为什么这是最优解?

  • 无视键顺序:字典按键访问,完全不依赖字段的排列顺序
  • 支持嵌套结构:正则很难处理多层嵌套的字典,但ast.literal_eval()能完美解析
  • 安全可靠:比eval()安全,不会执行传入的恶意代码
  • 零额外依赖:用Python内置模块,不用装任何第三方包

内容的提问来源于stack exchange,提问作者SwimJim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:48:57