当前位置: 首页 > 面试题库 >

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

陆琦
2023-03-14
问题内容

这是我的第一篇文章。作为一名崭新的Android开发人员,我几乎每天都阅读有关各种主题的SO帖子,但是对于这个问题,我没有从Google或SO那里获得任何帮助。

到目前为止,我的研究是:
搜索这个问题比平常要困难,因为搜索引擎似乎并不关心区分大小写,这在此问题中至关重要。搜索Google只会给我指向类本身,旧文章或完全不相关的文章的链接。我得到的最接近的是JSONArray
vsJSONObject,这是一个完全不同的问题。SO搜索得到相同的结果。据我所知,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,然后我的IDE立即提供了org.json
import语句。

问题:当外部库为Oracle库时,为什么Oracle制造的类不属于默认库?
JSON是旧的,过时的方式,而Json是新的,正确的方式吗?
它们在功能上是否相同?如果没有,请提供示例
有些情况对一种情况更好,而另一些情况更好?
最终,我应该使用哪个?为什么使用(如果尚未涵盖)?
如果是javax.json,那么下载该库的最佳(最安全)位置在哪里?


问题答案:

有点晚了,但是我想分享我的看法。

最近,当我发现一个同时包含两个库的Java项目时,我遇到了这个问题。

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

  1. JsonObject是不可变的。您不能将新的键/值对添加到已经存在的JsonObject中(此处参考:javax.json:将新的JsonNumber添加到现有的JsonObject中)

  2. 漂亮地打印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来创建一个JSON javax.json。多一步可以避免。

我敢肯定还有更多差异(不确定是否可以JsonObject通过字符串创建a ),但这是我的想法。



 类似资料:
  • 这是我的第一个帖子。作为一名初出茅庐的Android开发者,我几乎每天都在阅读各种主题的SO帖子,但对于这个问题,我没有从谷歌那里找到任何帮助。 我到目前为止的研究: 搜索这个问题比正常情况要难,因为搜索引擎似乎不关心大小写敏感性,而大小写敏感性在这个问题中是至关重要的。搜索谷歌只给了我类本身的链接,旧文章,或者完全不相关的文章。我得到的最接近的是JSONArray和JSONObject,这是一个

  • 所以我可以从第一个JSOObject中获得所有元素,但我需要其他的,我已经尝试了更多的解决方案,但它们对我不起作用...

  • 本文向大家介绍JSONObject与JSONArray的使用,包括了JSONObject与JSONArray的使用的使用技巧和注意事项,需要的朋友参考一下 1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar

  • 问题内容: 我想向的现有实例添加属性。如果此属性为,则非常简单: 但是,我也想添加一个,但找不到创建的实例的方法。这是我可以做的: 但是我想不出一种更肮脏的方式来完成任务。那么-是否有更直接,更简洁的方法向现有实例添加? 问题答案: 好吧,我自己弄清楚了: 你不能 。 应该是一成不变的。即使存在,在运行时也会抛出。因此,如果您想向现有资产添加键/值对,则需要类似 然后与

  • 问题内容: 我有一个来自服务器的JSON字符串,它看起来像这样: 我的任务是获取“ term_id”和“ name”字段的值。我曾经使用以下代码从当前JSONObject中获取“类别”对象: 和看起来像这样: 但是在那之后,我不知道如何获得这些领域。有什么方法可以从JSONObject获取所有JSONObject子级吗? 如果您有源代码或可以举一个例子,请与我分享。 问题答案: 在这里,您可以检索