【发布时间】:2019-01-10 16:53:54
【问题描述】:
如果以下代码多年来都能完美运行。突然,当它运行时,我在帖子标题中收到错误消息。
responseContactList 从 api 调用返回。生成的 tempStr 包含以下 JSON: { “列表”: { "access_level": "只读", "地址": "9997-dlsrir-b8aky4@mg.lmsnet.com", "created_at": "2019 年 1 月 10 日星期四 15:20:35 -0000", “描述”: ””, "members_count": 1, "name": "123 N. MICHIGAN AVENUE CONDOMINIUM ASSOCIATION" } }
我验证了 JSON 是好的。当我单步调试调试器并观察 getString 方法(见下文)时,程序获取的是 JSONObject 而不是字符串。知道为什么会发生这种情况以及如何纠正吗?这是在 .get() 调用之后显示为对象值的内容:
{"access_level":"readonly","address":"9997-dlsrir-b8aky4@mg.lmsnet.com","name":"123 N. MICHIGAN AVENUE CONDOMINIUM ASSOCIATION","created_at":"星期四, 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.");
}
【问题讨论】:
-
返回的对象是 JSONObject,而不是 String。如果最近开始出现这种情况,则 API 发生了变化。
-
我也这么认为,但我的生产代码仍然运行良好。就好像 org.json 代码被更改了一样。知道如何解决这个问题吗?