以下代码是否可以正常使用多年。突然,当它运行时,我在帖子标题中收到错误消息。
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.");
}
答案 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" );