JSCONObject.getString(“ list”)现在返回org.json.JSONException:JSONObject [“ list”]不是字符串

时间:2019-01-10 16:53:55

标签: java json

以下代码是否可以正常使用多年。突然,当它运行时,我在帖子标题中收到错误消息。

responseContactList是从api调用返回的。生成的tempStr包含以下JSON: {   “列表”:{     “ access_level”:“只读”,     “地址”:“ 9997-dlsrir-b8aky4@mg.lmsnet.com”,     “ created_at”:“星期四,2019年1月10日15:20:35 -0000”,     “ description”:“”,     “ members_count”:1     “名称”:“ 123 N. MICHIGAN大道共管协会”   } }

我验证了JSON的正确性。当我单步调试器并观看getString方法(请参见下文)时,程序将获取JSONObject而不是String。知道为什么会发生这种情况以及如何纠正它吗?这就是在.get()调用之后显示为对象值的内容:

{“ access_level”:“只读”,“地址”:“ 9997-dlsrir-b8aky4@mg.lmsnet.com”,“名称”:“ 123 N. MICHIGAN AVENUE CONDOMINIUM ASSOCIATION”,“ created_at”:“ Thu ,2019年1月10日15:20:35 -0000“,” description“:”“,” members_count“:1}

public MailingList( ClientResponse responseContactList )
    {
        try
        {
            System.out.println( "Begin MailingList Constructor!" );
            String tempStr = responseContactList.getEntity(String.class);
            JSONObject aJSONObject = new JSONObject( tempStr );
            aJSONObject = new JSONObject( aJSONObject.getString( "list" ) );
            createdAt = aJSONObject.getString( "created_at" );
            address = aJSONObject.getString( "address" );
            membersCount = Long.parseLong( aJSONObject.getString( "members_count" ) );
            description = aJSONObject.getString( "description" );
            name = aJSONObject.getString( "name" );

        } catch( Exception e )
        {
            e.printStackTrace();
            isValid = false;
        }
        isValid = true;
        System.out.println( "End MailingList Constructor!" );
    }


   /**
     * Get the string associated with a key.
     *
     * @param key
     *            A key string.
     * @return A string which is the value.
     * @throws JSONException
     *             if there is no string value for the key.
     */
    public String getString(String key) throws JSONException {
        Object object = this.get(key);
        if (object instanceof String) {
            return (String) object;
        }
        throw new JSONException("JSONObject[" + quote(key) + "] not a string.");
    }

2 个答案:

答案 0 :(得分:0)

我认为aJSONObject.getJSONObject( "list" )是一个嵌套对象,因为关于json,它不是数组。如果是列表,则方括号 [] 应为方括号。 aJSONObject.getJSONArray("list")

答案 1 :(得分:0)

似乎是2011年5月的这一变化是为什么行为不同的可能原因。

https://github.com/stleary/JSON-java/commit/f4cb14728f13629972a0ea76bb3dc0705a735fa8

看一下第634行。toString方法通常看起来像这样,它将为您提供正确的结果:

 Object object = get(key);
 return object == NULL ? null : object.toString();

您必须早于2011年拥有JSON库,并且最近将其更新为较新的版本

为了使用最新的库,请尝试更改

 aJSONObject = new JSONObject( aJSONObject.getString( "list" ) ); 

 aJSONObject = aJSONObject.getJSONObject( "list" );