在AEM 6.3中,不推荐使用JSONArray API,那么替代JSONArray API的替代方法是什么?
由于许可证问题,这些类已被Sling 9删除。它只是json.org库。 Sling本身只将它用于一些东西,因此Sling被重构为没有它的相处。
我担心,没有替代品。您必须选择不同的JSON库,将其包含在项目中并移植代码。由于JSON lib非常简单,因此它应该是可行的。
这里有一些与邮件列表的链接:
http://mail-archives.apache.org/mod_mbox/www-legal-discuss/201611.mbox/browser
https://issues.apache.org/jira/browse/SLING-6536
这是有问题的许可证。它包含含糊不清的句子“软件应该用于善,而不是邪恶”。
避免(大多数)代码更改的另一种方法是使用Org.Json替换Sling Commons JSON库,如果您可以使用导致它首先被弃用的许可证更改。
添加到pom.xml依赖项:
您可以将org.json依赖项添加到pom.xml:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
<!-- Or depending on version of AEM
use the granite bundled version instead -->
<dependency>
<artifactId>json</artifactId>
<version>20090211_1</version>
<groupId>com.adobe.granite.bundles</groupId>
<scope>provided</scope>
</dependency>
或者使用Open-JSON,Android团队的洁净室重新实现,它具有标准的Apache 2.0许可证,没有“邪恶”条款:
<dependency>
<groupId>com.tdunning</groupId>
<artifactId>json</artifactId>
<version>1.8</version>
</dependency>
更新导入语句
Apache Sling Commons JSON主要是一个重新打包的org.json解析器,除了包路径差异外似乎兼容。要更改为org.json或Open-Json解析器,请更改这些导入:
import org.apache.sling.commons.json.JSONArray;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.apache.sling.commons.json.io.JSONWriter;
至
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONWriter;
对于许多人来说,这将是一个可接受且干净的解决方案,不需要重新编写所有代码来使用GSON或Jackson(两者都在AEM中提供)。
警告:我只测试了这个编译...你可能需要在你的包中嵌入解析器。这些解析器都没有声称是OSGi意识到的。
您可以根据您的要求使用任何json API。我建议使用Gson非常容易使用,因为可以将json对象直接映射到pojo类,然后使用pojo类的对象。它删除了许多用于逐个读取json对象的样板代码。