【问题标题】:python - parse only first level of JSON [duplicate]python - 仅解析第一级 JSON [重复]
【发布时间】:2021-02-18 14:33:57
【问题描述】:

我有一个 JSON 存储为像这样的字符串:

message = """{"info":{"keyVersion":1,"timestamp":"2020-11-05 20:00:00","encryptedData":"75657374696f6e732068617665207265636569"},"mac":"4d6163204b65792049732048455245"}"""

我的目标是计算存储在“信息”部分的数据的 MAC 值。 mac 是在字符串上计算的:

{"keyVersion":1,"timestamp":"2020-11-05 20:00:00","encryptedData":"75657374696f6e732068617665207265636569"}

当我尝试使用 json.loads 解析 JSON“消息”而不是提取信息部分并将其设置为字符串时,新字符串具有不同的格式。这是我的部分代码:

parsed_message = json.loads(message)
info_part = parsed_message["info"]
print json.dumps(info_part)

结果是:

{"encryptedData":"75657374696f6e732068617665207265636569", "keyVersion":1, "timestamp":"2020-11-05 20:00:00"}

当我在这个新字符串上计算 mac 值时,我得到的结果与初始消息中的 mac 不同(因为其中有更多数据并且字段顺序不同)。

我正在寻找一种仅将信息部分提取为字符串的方法,因为它在原始消息中提供。我尝试使用正则表达式,但我对计数 " 和 {}

感到困惑

提前感谢您的帮助!

【问题讨论】:

    标签: python json regex string parsing


    【解决方案1】:

    试试这个:

    (?<=info\":).*(?=,\"mac\")

    Demo

    python3代码:

    import re
    
    test = """{"info":{"keyVersion":1,"timestamp":"2020-11-05 20:00:00","encryptedData":"75657374696f6e732068617665207265636569"},"mac":"4d6163204b65792049732048455245"}"""
    print(*re.findall(r"(?<=info\":).*(?=,\"mac\")", test))
    

    Demo

    【讨论】:

    • 完美运行,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2014-10-02
    • 1970-01-01
    相关资源
    最近更新 更多