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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

这是我的第一篇文章。作为新兴的Android开发人员,我几乎每天都会在各种主题上阅读SO帖子,但对于这个问题,我没有找到Google或SO的帮助。

我的研究到目前为止: 搜索这个问题比平常更难,因为搜索引擎似乎不关心区分大小写,这在这个问题上至关重要。搜索Google只给了我链接到课程本身,旧文章或完全不相关的文章。我得到的最接近的是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中,该IDE会立即产生一个错误,但它没有提示像它通常那样的导入语句。我已经了解到,这意味着该类不是内置库的一部分。

问题是我粘贴的代码使用JsonObject(来自javax.json库),而不是JSONObject(来自org.json库)。当我注意到Android页面和Oracle页面之间的区别时,我将代码从Json更改为JSON,并立即提供了org.json import语句。

问题:为什么当外部库是Oracle时,Oracle创建的类不是默认库的一部分? JSON是旧的,不赞成使用的方式,Json是新的,正确的方式吗? 它们在功能上是否相同?如果没有,请提供示例? 一种情况会更好,另一种更好? 我应该使用哪种方法,以及为什么(如果尚未覆盖)? 如果,javax.json,哪里是最好(最安全)的地方下载该库)?

提问于
用户回答回答于

最近我遇到了这个问题,当我在两个库中找到一个Java项目并且它们被同时使用时。

我认为这org.json是更容易阅读和使用,主要有两个原因(满足我的需要):

  1. JsonObject是不可变的。您不能将新的键/值对添加到已存在的JsonObject中(参考:javax.json:将新的JsonNumber添加到现有的JsonObject中
  2. 需要几行才能打印JsonObject或JsonArray,而只需要1行就可以使用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创建一个JSON javax.json。还有一点可以避免。

我确信有更多的不同(不确定是否可以JsonObject从String 创建一个 ),但这些都是我的想法。

用户回答回答于

我建议您使用Google的json-simple工具包来处理JSON对象。它提供了有用的功能,并且不依赖于外部库,这在Android应用程序开发过程中变成了一个巨大的问题。

如果你不想在你的项目中使用json-simple,你应该使用org.json中的JSONObject,因为它是由Android JDK提供的。有关更多信息,请参阅http://developer.android.com/reference/org/json/JSONObject.html

扫码关注云+社区