在进行单元测试时,我注意到在运行unittests时调用JSONObject.getNumber()时会出现一些扼杀行为。这是错误:

java.lang.NoSuchMethodError: 'java.lang.Number org.json.JSONObject.getNumber(java.lang.String)


这是代码:

Number logId;
logId = jsonObject.getNumber("logId");


对于我自己的实现,我可以使用以下代码:

logId = jsonObject.getInt("logId");


但是我真的很想知道当尝试使用JSONObject.getNumber()进行单元测试时缺少什么。为什么缺少getNumber()方法?

编辑2019-12-20 13:59
我正在使用maven groupID'org.json',artifactId'json',版本'20190722'。我将.getNumber()称为定制的new JSONObject().put(stuff).put(stuff)

最佳答案

请检查您的json版本。我能够在以下版本中找到jsonObject.getNumber():'20180813'

这是gradle依赖项供您参考

compile group: 'org.json', name: 'json', version: '20180813'


这是在那个jar中找到的实现类

/**
     * Get the Number value associated with a key.
     *
     * @param key
     *            A key string.
     * @return The numeric value.
     * @throws JSONException
     *             if the key is not found or if the value is not a Number
     *             object and cannot be converted to a number.
     */
    public Number getNumber(String key) throws JSONException {
        Object object = this.get(key);
        try {
            if (object instanceof Number) {
                return (Number)object;
            }
            return stringToNumber(object.toString());
        } catch (Exception e) {
            throw new JSONException("JSONObject[" + quote(key)
                    + "] is not a number.", e);
        }
    }

07-26 09:08