我想读取存储在文件中的数据.我还没有决定存储它的格式,但我正在寻找一种易于解析的格式.最初我以为我会使用JSON,但似乎Java没有内置的JSON解析器.
存储的数据将是一堆记录,每个记录由一组字段组成.因此,存储在可以逐行读取的文本文件中并不够简单.这就是为什么我认为我需要像JSON这样的东西.但我不想只是为了解析格式而添加外部库.有什么建议?我是Java的新手.
iro*_*hon 17
虽然Java很多都没有标准的 JSON解析库,但有几个库可用,它们快速,可靠且易于使用.许多还允许您使用标准对象绑定方法(如JAXB)使用注释定义反序列化映射.
我自己更喜欢杰克逊.Google-GSon也很受欢迎,您可以看到有些人在这个问题上如何比较这两者.
您可能希望不那么害怕使用外部库.利用具有所需功能的现有库几乎总是更好,而不是自己编写.使用Maven或Ivy等工具自动计算和下载项目定义中的依赖项,实际上没有理由担心使用库.
话虽如此,在Java XML支持的当前状态下,您应该发现XML可以同等访问.这个答案提供了一个使用javax.xml.parsers.DocumentBuilder生成DOM 的简单示例.
Riy*_*lla 10
正如许多其他人所指出的那样,Java并没有将标准JSON解析库作为JDK的一部分提供,因此如果您想使用JDK捆绑技术并且完全没有依赖关系,那么您有3种XML解析选择:
现在,所说的一切,特别是如果你是新手,使用这些API并不是世界上最直观的.如果你以前用Java完成了XML解析,那么你会没事的.
如果您考虑使用微小的第三方JAR,我将指向您的Simple Java XML Parser(SJXP)库.它通过STAX解析的性能为您提供了轻松的XPath; 诚实地说(我是不偏不倚的,认真的) - 这太棒了.
我花了一年多的时间研究这个问题,同时编写了一个非常强大的Feed解析系统,该系统最初是作为一个基于SAX的系统,然后转移到STAX,我工作的越多,我就越能意识到我能够轻松地抽象出来STAX的痛苦与简单的规则.
您可以查看Usage示例,但实际上您定义了匹配的规则,如"/ library/book/title"将解析您的所有标记内容; 你可以解析属性甚至名称空间限定值(是的,它也支持名称空间!)
这是一个RSS提要解析器示例:
IRule linkRule = new DefaultRule(Type.CHARACTER, "/rss/channel/item/link") {
@Override
public void handleParsedCharacters(XMLParser parser, String text, Object userObject) {
// Also store the link, or something equivalently fancy
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您只需在创建时将该规则传递给解析器,如下所示:
XMLParser parser = new XMLParser(linkRule);
Run Code Online (Sandbox Code Playgroud)
你完成了; 只需通过parse方法为解析器提供XML文件,每次匹配路径时都会得到回调.
我已经对STAX上的库的开销进行了基准测试,分析和优化,以至于它几乎不存在.实际的补丁匹配是通过缓存的哈希码完成的,所以我甚至不在解析器中进行字符串比较.
它非常快,适用于Android.
如果你想做JSON,我强烈建议使用GSON.杰克逊速度更快,但API比GSON API复杂37倍.你会花更多的时间来确定你需要在杰克逊使用哪些课程,而不是使用GSON.
自从上一次GSON发布和流解析器的重写以来,速度差距已经被关闭了很多; 你可以使用他们的流解析器impl来获得接近Jackson的解析速度,如果这是至关重要的.
话虽这么说,如果你需要ULTIMATE速度超过任何东西并且优先级为#1,那么就使用Jackson.
我正在使用GSON:http://code.google.com/p/google-gson/来解析JSON,它非常易于使用:
Gson gson = new Gson();
String xyzAsString = gson.toJson(xyz);
Run Code Online (Sandbox Code Playgroud)
反序列化JSON使用:
Gson gson = new Gson();
Classname xyz = gson.fromJson(JSONedString, Classname.class);
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请访问:https://sites.google.com/site/gson/gson-user-guide
| 归档时间: |
|
| 查看次数: |
27695 次 |
| 最近记录: |