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

用哪一个?org.json中的JSONObject与javax.json中的JSONObject,java,android,json,Java,Android,Json,这是我的第一篇文章。作为一名初露头角的安卓开发者,我几乎每天都会阅读一些关于各种主题的帖子,但对于这个问题,我没有从谷歌或其他网站上找到任何帮助 我目前的研究: 搜索这个问题比正常情况下更难,因为搜索引擎似乎不关心区分大小写,这在这个问题上至关重要。搜索Google只给我提供了类本身、旧文章或完全无关的文章的链接。我得到的最接近的结果是JSONArray vs JSONObject,这是一个完全不同的问题。所以搜索得到了同样的结果。据我所知,SO上的所有相关帖子都是指JSONObject而不是J

这是我的第一篇文章。作为一名初露头角的安卓开发者,我几乎每天都会阅读一些关于各种主题的帖子,但对于这个问题,我没有从谷歌或其他网站上找到任何帮助

我目前的研究:
搜索这个问题比正常情况下更难,因为搜索引擎似乎不关心区分大小写,这在这个问题上至关重要。搜索Google只给我提供了类本身、旧文章或完全无关的文章的链接。我得到的最接近的结果是JSONArray vs JSONObject,这是一个完全不同的问题。所以搜索得到了同样的结果。据我所知,SO上的所有相关帖子都是指JSONObject而不是JSONObject

Oracle和json.org文档都没有提到另一方,Android开发者JSONObject页面也没有提到使用org.json库的内容



我也会为JSONObject发布一个Android参考页面的链接,但我作为新手的代表性太低了

问题的历史记录: 我从Oracle页面上阅读了关于Json编码和解码的内容,并尝试将其复制和粘贴到我的AndriodStudio IDE中,这立即产生了一个错误,它不像通常那样建议使用import语句。我逐渐了解到,这意味着该类不是内置库的一部分

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

问题: 当外部库是时,为什么Oracle生成的类不是默认库的一部分?
JSON是旧的、不推荐的方式,JSON是新的、合适的方式吗?
它们的功能相同吗?如果没有,请提供示例?
有些情况对一方有利,有些情况对另一方有利吗?
最后,我应该使用哪一种,以及为什么(如果尚未涵盖)?

如果是javax.json,那么下载该库的最佳(最安全)位置在哪里?

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


回答您的问题:如果您不想在项目中使用json simple,您应该使用org.json中的JSONObject,因为它是由Android JDK提供的。欲了解更多信息,请参阅。

有点晚了,但我想与大家分享我的看法

最近,当我发现一个Java项目同时使用了两个库时,我遇到了这个问题

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

  • JsonObject是不可变的。无法将新的键/值对添加到已存在的JsonObject(此处引用:)

  • 漂亮地打印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();
    
    StringWriter sw=新建StringWriter();
    映射属性=新的HashMap();
    properties.put(JsonGenerator.PRETTY_PRINTING,true);
    JsonWriterFactory writerFactory=Json.createWriterFactory(属性);
    JsonWriter=writerFactory.createWriter(sw);
    writeObject(jsonObject)//之前创建的JsonObject
    jsonWriter.close();
    字符串prettyPrintedJSON=sw.toString();
    
  • 这是我用来获取缩进JSON以写入文件的代码。对于org.json,我只需要
    jsonObject.toString(4)

    另一个区别是构造函数。您需要一个
    JsonObjectBuilder
    来使用
    javax.JSON
    创建JSON。还有一步是可以避免的

    我确信还有更多的不同之处(不确定是否可以从字符串创建
    JsonObject
    ),但这些是我的想法

  • org.json
    不包含用于解析json字符串的解析类。而
    org.json.simple
    包含一个解析类

  • org.json.JSONObject
    包含许多直接获取int、boolean、object、string、json数组等的getter方法。
    org.json.simple.JSONObject
    不包含特定方法,所以每次获取特定键的值时都需要键入cast

  • 简单地说,使用
    org.json.simple.JSONObject
    单独进行解析,并将其转换为
    org.json.JSONObject
    ,以便在程序中进一步使用


  • 如上所述,JSONObject是由android的API提供的。JsonObject专门用于JavaEE开发,它主要用于web应用程序和网络功能等

    Android没有从OracleJavaEE包中预打包JsonObject的原因是因为javax可以做的很多事情在Android中是不允许的,比如未经许可访问互联网。这意味着导入javax的整个jars文件将与Android冲突


    如果您计划使用JavaEE构建自己的后端,我强烈建议您使用JsonObject而不是JsonObject。另一方面,如果您知道一个预构建的rest服务或类似的东西,它更支持Android的JSON

    用于在Android上开发的JDK的默认库是由Android提供的,而不是Oracle。另外,
    javax.json
    是JavaEE的一部分,而不是JavaSE。当我从纯Java迁移到Android时,我没有下载额外的jdk。AndroidStudio应用程序中是否包含备用JDK?我并不反对,只是不熟悉这个主题。你所说的“Android应用开发过程中的一个巨大问题”到底是什么意思。另外,如果org.json导致android developer出现问题,为什么developer.android.com会使用org.json