繁体   English   中英

在Python中解析序列化的Java对象

[英]Parsing Serialized Java objects in Python

这篇文章底部的字符串是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]

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

  1. 时间
  2. 时区

如何将格里高利字符串转换为格里高利日历中有提取此代码的代码

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM