XPages,Javascript - 解析JSON并返回所有键的值

时间:2017-03-02 11:36:53

标签: javascript json xpages lotus-domino xpages-ssjs

通过使用eric restful的REST API,我能够返回以下JSON。



{
	"\"\"": "",
	"\"AAC\"": "London Marketing",
	"\"AAD\"": "Broadstairs Marketing",
	"\"AAE\"": "Matalan Marketing",
	"\"AAF\"": "Sittingbourne Design"
}




我只能返回其中一个键。



var custList = function () {
	importPackage(com.eric.restful);	
	
	try{
		var myDoc:NotesDocument = database.getProfileDocument("db","");		
		var urlStr = myDoc.getItemValueString("mData");
		
		var custListLiteral = CustRestConsumer.GetRestData(urlStr);
		print("list literal: " + custListLiteral);
		
		var getContact = JSON.parse(custListLiteral);
		print("value of AAC: " + getContact["\"AAC\""]);
		
	}catch(e){
		print("error getting list: " + e.toString());
	}
	return getContact["\"AAC\""]; //returns London Marketing
}






custList();
//returns London Marketing




我希望能够在不传递任何密钥的情况下返回所有值。

任何帮助将不胜感激。

感谢Paul的回复,我现在通过将以下方法添加到CustRestConsumer类来实现地图:



private static final Gson gson = new GsonBuilder().disableHtmlEscaping().create();
private static final Type TT_mapStringString = new TypeToken<Map<String,String>>(){}.getType();

public static Map<String, String> getJsonArray(String json) {
    Map<String, String> ret = new HashMap<String, String>();
    if (json == null || json.isEmpty())
        return ret;
     return gson.fromJson(json, TT_mapStringString);
}
&#13;
&#13;
&#13; 但是当我在下面的javascript函数中调用它时:

&#13;
&#13;
var custList = function () {
	importPackage(com.eric.restful);	
	
	try{
		var myDoc:NotesDocument = database.getProfileDocument("db","");		
		var urlStr = myDoc.getItemValueString("mData");
		
		var custListLiteral = CustRestConsumer.GetRestData(urlStr);
		print("list literal: " + custListLiteral);
		
		var mapList = fromJson(custListLiteral,TT_mapStringString);
		Map<String, String> strObj = CustRestConsumer.jsonToMapStringString(mapList);
		print("strObj: " + strObj);
		
		//var getContact = JSON.parse(custListLiteral);
		//print("value of AAC: " + getContact["\"AAC\""]);
		
	}catch(e){
		print("error getting list: " + e.toString());
	}
	return strObj;
}
&#13;
&#13;
&#13;

我在下面收到错误:

error getting list: 'TT_mapStringString' not found

将欣赏任何输入。感谢。

1 个答案:

答案 0 :(得分:1)

如果您愿意使用Java库,那么好消息是IBM已经为您完成了大量工作。查看.cshtmlcom.ibm.commons.util.io.json.JsonParser课程。这些允许将JSON字符串解析为Java Map。在OpenNTF Domino API Demo Servlet中,我使用以下代码:

com.ibm.commons.util.io.json.JsonFactory

&#34;主体&#34;是从REST服务输入中提取的JSON字符串。您可能会遇到第一个元素的问题,因为它没有属性名称,但它没有任何值。