使用哪一个?org.json中的JSONObject VS javax.json中的JsonObject

juzqafwq  于 2023-11-20  发布在  Java
关注(0)|答案(4)|浏览(113)

这是我的第一篇文章。作为一个初出茅庐的Android开发者,我几乎每天都在阅读SO关于各种主题的文章,但对于这个问题,我没有从谷歌或SO那里找到任何帮助。
到目前为止,我的研究:
搜索这个问题比正常情况下更难,因为搜索引擎似乎不关心大小写敏感性,这在这个问题中至关重要。搜索谷歌只给我类本身的链接,旧文章,或完全无关的文章。我得到的最接近的是JSONArray vs JSONObject,这是一个完全不同的问题。所以搜索得到了相同的结果。据我所知,SO上的所有相关帖子都引用JSONObject而不是JsonObject。
Oracle和json.org文档都没有提到另一方,使用org.json库的Android开发人员JSONObject页面也没有提到。
http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html
http://www.json.org/javadoc/org/json/JSONObject.html
我也会发布一个JSONObject的Android参考页面的链接,但是我作为一个新手的代表性太低了。
问题历史:我从Oracle页面上阅读了有关JSON编码和解码的内容,并尝试将其复制和粘贴到我的AndriodStudio IDE中,但立即产生了一个错误,它没有像通常那样建议导入语句。我开始了解到这意味着该类不是内置库的一部分。
问题是我粘贴的代码使用了JsonObject(来自javax.json库)而不是JSONObject(来自org.json库)。当我注意到Android页面和Oracle页面之间的大小写差异时,我将代码从JSON更改为JSON,并且立即我的IDE提供了org.json导入语句。
问:为什么Oracle创建的类不是默认库的一部分,而外部库是?
JSON是旧的,过时的方式,JSON是新的,正确的方式吗?
它们在功能上是否相同?如果不相同,请举例说明?
是不是有些情况对一方更好,有些情况对另一方更好?
最后,我应该使用哪个,为什么(如果还没有覆盖)?
如果,javax.json,哪里是下载该库的最佳(最安全)位置?

pkwftd7m

pkwftd7m1#

有点晚了,但我想分享我的观点。
我最近遇到了这个问题,当我发现一个Java项目同时使用这两个库时。
我认为org.json更容易阅读和使用,主要有两个原因(为了我的需要):

  1. JsonObject是不可变的。您不能向现有的JsonObject添加新的键/值对(参考:javax.json: Add new JsonNumber to existing JsonObject
    1.打印JsonObject或JsonArray需要几行代码,而打印JSONObject或JSONArray只需要一行代码。示例:
StringWriter sw = new StringWriter();
Map<String, Object> properties = new HashMap<>();
properties.put(JsonGenerator.PRETTY_PRINTING, true);

JsonWriterFactory writerFactory = Json.createWriterFactory(properties);
JsonWriter jsonWriter = writerFactory.createWriter(sw);

jsonWriter.writeObject(jsonObject); //JsonObject created before
jsonWriter.close();
String prettyPrintedJSON = sw.toString();

字符串
这是我用来获取缩进JSON以写入文件的代码。使用org.json,我只需要jsonObject.toString(4)
另一个区别是构造函数。你需要一个JsonObjectBuilder来创建一个带有javax.json的JSON。这是可以避免的。
我确信还有更多的不同之处(不确定是否可以从String创建JsonObject),但这些是我的想法。

h79rfbju

h79rfbju2#

如前所述,JSONObject由android的API提供。JsonObject专门用于Java EE开发,主要用于Web应用程序和网络功能等。
Android没有从Oracle Java EE包中预打包JsonObject的原因是因为javax可以做的很多事情在Android中是不允许的,比如未经许可访问互联网。这意味着导入javax的整个jar文件将与Android冲突。
如果你打算用Java EE构建自己的后端,我强烈建议你使用JsonObject而不是JSONObject。另一方面,如果你知道一个预构建的REST服务或类似的东西,它更好地支持Android的JSON。

ippsafx7

ippsafx73#

我建议你使用方怡东的json-simple工具包来使用JSON对象。它提供了有用的功能,并且不依赖于外部库,这在Android应用程序开发过程中是一个巨大的问题。
回答你的问题:如果你不想在你的项目中使用json-simple,你应该使用org.json中的JSONObject,因为它是由Android JDK提供的。有关更多信息,请参阅http://developer.android.com/reference/org/json/JSONObject.html

hfsqlsce

hfsqlsce4#

  1. org.json不包含解析JSON字符串的parse类,而org.json.simple包含parse类。
  2. org.json.JSONObject包含了大量的getter方法,可以直接获取int,boolean,object,string,JSON Array等。org.json.simple.JSONObject不包含特定的方法,所以每次获取特定键的值时都需要进行类型转换。
    1.简单地说,使用org.json.simple.JSONObject单独进行解析,并将其类型转换为org.json.JSONObject,以便在程序中进一步使用。

相关问题