【问题标题】:Parsing Serialized Java objects in Python在 Python 中解析序列化的 Java 对象
【发布时间】:2014-12-09 21:38:18
【问题描述】:

本文底部的字符串是Java 中java.util.GregorianCalendar 对象的序列化。我希望用 Python 解析它。

我想我可以结合使用正则表达式和key=val 拆分来解决这个问题,即类似于以下内容:

text_inside_brackets = re.search(r"\[(.*)\]", text).group(1)

import parse
for x in [parse('{key} = {value}', x) for x in  text_inside_brackets.split('=')]:
 my_dict[x['key']] = x['value'] 

我的问题是:什么是更有原则的/稳健方法来做到这一点?是否有任何可用于解决此问题的序列化 Java 对象的 Python 解析器? (这样的事情存在吗?)。我还有什么其他选择?

我希望最终能在 JSON 或嵌套 Python 字典中解析它,以便我可以随心所欲地对其进行操作。

注意:我宁愿避免依赖于 Py4J 的解决方案,主要是因为它需要设置服务器和客户端,我希望在一个单一的 Python 脚本。

java.util.GregorianCalendar[time=1413172803113,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/New_York",offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=9,WEEK_OF_YEAR=42,WEEK_OF_MONTH=3,DAY_OF_MONTH=13,DAY_OF_YEAR=286,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=3,MILLISECOND=113,ZONE_OFFSET=-18000000,DST_OFFSET=3600000]

【问题讨论】:

  • JSON 是 AFAIK 原则性强且稳健的方法。如果您可以控制 Java 代码,请切换到 JSON。

标签: java python regex json


【解决方案1】:

GregorianCalendar 对象的序列化形式包含相当多的冗余。事实上,如果你想重构它,只有两个字段很重要:

  1. 时间
  2. 时区

How to convert Gregorian string to Gregorian Calendar?中有提取这个的代码

如果您想要一种更有原则和更稳健的方法,我赞同 mbatchkarov 使用 JSON 的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    相关资源
    最近更新 更多