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

标签 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]

最佳答案

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

  1. 时间
  2. 时区

How to convert Gregorian string to Gregorian Calendar?中有提取此内容的代码

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

关于java - 在Python中解析序列化的Java对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26371900/

相关文章:

javascript - 即使使用惰性量词,正则表达式也保持贪婪

javascript - 如何使用 selenium webdriver 提取 <nobr> 中的动态文本?

python - Python 的 MANIFEST.in 文件中的嫁接命令是什么?

java - 如何为 Joda 的 DateTime.parse() 设置默认时区

Python 数字金字塔

python - ARM 上的 Tornado socket.error

java - 正则表达式选择 XML 标签之间的空格

c# - <li></li> 标签的正则表达式

java - J2ME 操作数据的最佳方式?

java - 如何使用泛型类型访问静态内部类中的字段? (非常困难)