用哪一个?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
更易于阅读和使用,主要原因有两个(出于我的需要):
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();
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
不包含特定方法,所以每次获取特定键的值时都需要键入castorg.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