在Python中解析序列化Java对象

时间:2014-10-14 23:08:30

标签: java python regex json

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

1 个答案:

答案 0 :(得分:1)

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

  1. 时间
  2. 时区
  3. How to convert Gregorian string to Gregorian Calendar?

    中有提取此功能的代码

    如果你想要一种更有原则性和更强大的方法,我回应mbatchkarov建议使用JSON。